ZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUwLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwMTNmZgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUwLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK2RpZmYgLWFydU4gYS9DRkJhc2UuYyBiL0NGQmFzZS5jCistLS0gYS9DRkJhc2UuYwkyMDA5LTAyLTE5IDE2OjI1OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZCYXNlLmMJMjAxMC0xMC0wMSAxNDozMTozOC4yODY4MzA2NDUgLTA3MDAKK0BAIC0xMDYyLDQgKzEwNjIsMjAgQEAKKyAjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKysjaWYgZGVmaW5lZChfX2FybV9fKQorK19fYXNtX18gKAorKyIudGV4dFxuIgorKyIJLmFsaWduIDJcbiIKKysjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYCisrIi5wcml2YXRlX2V4dGVybiBfX19IQUxUXG4iCisrIl9fX0hBTFQ6XG4iCisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysiLmdsb2JsIF9fSEFMVFxuIgorKyJfX0hBTFQ6XG4iCisrI2Vsc2UKKysiLmdsb2JsIF9fX0hBTFRcbiIKKysiX19fSEFMVDpcbiIKKysjZW5kaWYKKysiCWJrcHRcbiIKKyspOworKyNlbmRpZiAvKiBkZWZpbmVkKF9fYXJtX18pICovCitkaWZmIC1hcnVOIGEvQ0ZCYXNlLmggYi9DRkJhc2UuaAorLS0tIGEvQ0ZCYXNlLmgJMjAwOS0wMi0xOSAxNjoyNTowNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGQmFzZS5oCTIwMTAtMTAtMDEgMTQ6MzA6MjMuNzk5NjQ0MDczIC0wNzAwCitAQCAtNTAsNiArNTAsMTAgQEAKKyAgICAgI2RlZmluZSBfX0xJVFRMRV9FTkRJQU5fXyAxCisgI2VuZGlmCisgCisrI2lmIChkZWZpbmVkKF9fQVJNRUxfXykgJiYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pKQorKwkjZGVmaW5lIF9fTElUVExFX0VORElBTl9fIDEKKysjZW5kaWYKKysKKyAjaWYgIWRlZmluZWQoX19CSUdfRU5ESUFOX18pICYmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorICNlcnJvciBEbyBub3Qga25vdyB0aGUgZW5kaWFuZXNzIG9mIHRoaXMgYXJjaGl0ZWN0dXJlCisgI2VuZGlmCitkaWZmIC1hcnVOIGEvQ0ZJbnRlcm5hbC5oIGIvQ0ZJbnRlcm5hbC5oCistLS0gYS9DRkludGVybmFsLmgJMjAwOS0wMi0xOSAxNjoyNTowNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGSW50ZXJuYWwuaAkyMDEwLTEwLTAxIDE0OjA1OjQ4LjkyNjc5OTgyOSAtMDcwMAorQEAgLTEyMSw2ICsxMjEsOCBAQAorICAgICAjZWxzZQorICAgICAgICAgI2Vycm9yIENvbXBpbGVyIG5vdCBzdXBwb3J0ZWQKKyAgICAgI2VuZGlmCisrI2VsaWYgZGVmaW5lZChfX2FybV9fKQorKwkjZGVmaW5lIEhBTFQgYXNtIF9fdm9sYXRpbGVfXygiYmtwdCIpCisgI2VuZGlmCisgCisgI2lmIGRlZmluZWQoREVCVUcpCitkaWZmIC1hcnVOIGEvaW5jbHVkZS9BdmFpbGFiaWxpdHlNYWNyb3MuaCBiL2luY2x1ZGUvQXZhaWxhYmlsaXR5TWFjcm9zLmgKKy0tLSBhL2luY2x1ZGUvQXZhaWxhYmlsaXR5TWFjcm9zLmgJMjAwOS0wMi0wNCAxMDo0MjoxOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL2luY2x1ZGUvQXZhaWxhYmlsaXR5TWFjcm9zLmgJMjAxMC0xMC0wMSAxNDowNzoxNC45OTk3ODAyOTMgLTA3MDAKK0BAIC04NCw3ICs4NCw3IEBACisgICAgICNpZmRlZiBfX0VOVklST05NRU5UX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEX18KKyAgICAgICAgICNkZWZpbmUgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgX19FTlZJUk9OTUVOVF9NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRF9fCisgICAgICNlbHNlCistICAgICAgICAjaWYgX19wcGM2NF9fIHx8IF9faTM4Nl9fIHx8IF9feDg2XzY0X18KKysgICAgICAgICNpZiBfX3BwYzY0X18gfHwgX19pMzg2X18gfHwgX194ODZfNjRfXyB8fCBfX2FybV9fCisgICAgICAgICAgICAgI2RlZmluZSBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCBNQUNfT1NfWF9WRVJTSU9OXzEwXzQKKyAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgI2RlZmluZSBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCBNQUNfT1NfWF9WRVJTSU9OXzEwXzEKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUxLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkMTczYwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUxLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2RpZmYgLWFydU4gYS9jb25maWd1cmUgYi9jb25maWd1cmUKKy0tLSBhL2NvbmZpZ3VyZQkyMDA5LTAzLTEwIDIzOjQ0OjM0LjAwMDAwMDAwMCAtMDcwMAorKysrIGIvY29uZmlndXJlCTIwMTAtMTAtMjAgMTM6MTI6MTkuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTg1MjgsNiArMTg1MjgsOCBAQAorIAlmaQorIAorIAlVVUlEX3NhdmVkX2xpYnM9IiR7TElCU30iCisrCVVVSURfc2F2ZWRfbGRmbGFncz0iJHtMREZMQUdTfSIKKysJTERGTEFHUz0iJHtVVUlEX0xERkxBR1N9ICR7TERGTEFHU30iCisgCUxJQlM9IiIKKyAKKyAKK0BAIC0xODYwMyw4ICsxODYwNSwxMCBAQAorIAorIAorIAlVVUlEX0xJQlM9IiR7VVVJRF9MREZMQUdTfSAke0xJQlN9IgorKwlMREZMQUdTPSIke1VVSURfc2F2ZWRfbGRmbGFnc30iCisgCUxJQlM9IiR7VVVJRF9zYXZlZF9saWJzfSIKKyAJdW5zZXQgVVVJRF9zYXZlZF9saWJzCisrCXVuc2V0IFVVSURfc2F2ZWRfbGRmbGFncworIAorIGVsaWYgdGVzdCAieCR7VVVJRF9DT05GSUd9IiAhPSAieCI7IHRoZW4KKyAJVVVJRF9DUFBGTEFHUz0iYCR7VVVJRF9DT05GSUd9IC0tY2ZsYWdzYCIKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwZjRhNAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLnBhdGNoCkBAIC0wLDAgKzEsMTY2NCBAQAorZGlmZiAtYXJ1TiBhL2luY2x1ZGUvQXNzZXJ0TWFjcm9zLmggYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCistLS0gYS9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCTIwMDktMDItMDMgMjE6Mjg6MjYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCTIwMDktMDQtMTMgMTA6MDg6MjMuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSwyNiArMSw1MSBAQAorIC8qCistICAgICBGaWxlOiAgICAgICBBc3NlcnRNYWNyb3MuaAorLSAKKy0gICAgIENvbnRhaW5zOiAgIFRoaXMgZmlsZSBkZWZpbmVzIHN0cnVjdHVyZWQgZXJyb3IgaGFuZGxpbmcgYW5kIGFzc2VydGlvbiBtYWNyb3MgZm9yCistICAgICAgICAgICAgICAgICBwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKy0gICAgICAgICAgICAgICAgIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0aHJvdWdob3V0IEFwcGxlJ3Mgc29mdHdhcmUuCistCistICAgICAgICAgICAgICAgICBTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKy0gICAgICAgICAgICAgICAgIChkZXZlbG9wLCBUaGUgQXBwbGUgVGVjaG5pY2FsIEpvdXJuYWwsIElzc3VlIDExLCBBdWd1c3QvU2VwdGVtYmVyIDE5OTIpCistICAgICAgICAgICAgICAgICA8aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZGV2L3RlY2hzdXBwb3J0L2RldmVsb3AvaXNzdWUxMXRvYy5zaHRtbD4KKy0gICAgICAgICAgICAgICAgIGZvciB0aGUgbWV0aG9kb2xvZ3kgYmVoaW5kIHRoZXNlIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zLgorLQorLSAgICAgQ29weXJpZ2h0OiAgqSAyMDAyIGJ5IEFwcGxlIENvbXB1dGVyLCBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorLSAgCistICAgICBCdWdzPzogICAgICBGb3IgYnVnIHJlcG9ydHMsIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBwYWdlIG9uCistICAgICAgICAgICAgICAgICB0aGUgV29ybGQgV2lkZSBXZWI6CisrICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDggYnkgQXBwbGUgSW5jLi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9TVEFSVEAKKysgKiAKKysgKiBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlCisrICogYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlCisrICogVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL2Fwc2wvIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzCisrICogZmlsZS4KKysgKiAKKysgKiBUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorKyAqIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKKysgKiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULgorKyAqIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqIAorKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9FTkRACisrICovCisrCisrCisrLyoKKysJRmlsZTogICAgICAgQXNzZXJ0TWFjcm9zLmgKKyAgCistICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vYnVncmVwb3J0ZXIvIAorKwlDb250YWluczogICBUaGlzIGZpbGUgZGVmaW5lcyBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zIGZvcgorKwkJCQlwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKysJCQkJVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRocm91Z2hvdXQgQXBwbGUncyBzb2Z0d2FyZS4KKysJCisrCQkJCU5ldyBjb2RlIG1heSBub3Qgd2FudCB0byBiZWdpbiBhZG9wdGluZyB0aGVzZSBtYWNyb3MgYW5kIGluc3RlYWQgdXNlCisrCQkJCWV4aXN0aW5nIGxhbmd1YWdlIGZ1bmN0aW9uYWxpdHkuCisrCQorKwkJCQlTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKysJCQkJKGRldmVsb3AsIFRoZSBBcHBsZSBUZWNobmljYWwgSm91cm5hbCwgSXNzdWUgMTEsIEF1Z3VzdC9TZXB0ZW1iZXIgMTk5MikKKysJCQkJPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Rldi90ZWNoc3VwcG9ydC9kZXZlbG9wL2lzc3VlMTF0b2Muc2h0bWw+IG9yCisrCQkJCTxodHRwOi8vd3d3Lm1hY3RlY2guY29tL2FydGljbGVzL2RldmVsb3AvaXNzdWVfMTEvUGFyZW50X2ZpbmFsLmh0bWw+CisrCQkJCWZvciB0aGUgbWV0aG9kb2xvZ3kgYmVoaW5kIHRoZXNlIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zLgorKwkKKysJQnVncz86ICAgICAgRm9yIGJ1ZyByZXBvcnRzLCBjb25zdWx0IHRoZSBmb2xsb3dpbmcgcGFnZSBvbgorKwkJCQl0aGUgV29ybGQgV2lkZSBXZWI6CisrCisrCSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9idWdyZXBvcnRlci8gCisgKi8KKyAjaWZuZGVmIF9fQVNTRVJUTUFDUk9TX18KKyAjZGVmaW5lIF9fQVNTRVJUTUFDUk9TX18KKyAKKy0KKyAvKgorICAqICBNYWNybyBvdmVydmlldzoKKyAgKiAgCitAQCAtNjAsNiArODUsMjcgQEAKKyAgKiAgICAgIEJ5IGRlZmF1bHQsIGFsbCBtZXNzYWdlcyB3cml0ZSB0byBzdGRlcnIuICBJZiB5b3Ugd291bGQgbGlrZSB0byB3cml0ZSBhIGN1c3RvbQorICAqICAgICAgZXJyb3IgbWVzc2FnZSBmb3JtYXRlciwgZGVmaW5lZCBERUJVR19BU1NFUlRfTUVTU0FHRSB0byB5b3VyIGZ1bmN0aW9uIG5hbWUuCisgICoKKysgKiAgICAgIEVhY2ggaW5kaXZpZHVhbCBtYWNybyB3aWxsIG9ubHkgYmUgZGVmaW5lZCBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkLCBzbworKyAqICAgICAgeW91IGNhbiByZWRlZmluZSB0aGVpciBiZWhhdmlvciBzaW5nbHkgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGRlZmluaXRpb24gYmVmb3JlCisrICogICAgICB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuCisrICoKKysgKiAgICAgIElmIHlvdSBkZWZpbmUgX19BU1NFUlRNQUNST1NfXyBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkLCB0aGVuIG5vdGhpbmcgaW4KKysgKiAgICAgIHRoaXMgZmlsZSB3aWxsIHRha2UgZWZmZWN0LgorKyAqCisrICogICAgICBQcmlvciB0byBNYWMgT1MgWCAxMC42IHRoZSBtYWNybyBuYW1lcyB1c2VkIGluIHRoaXMgZmlsZSBjb25mbGljdGVkIHdpdGggc29tZQorKyAqICAgICAgdXNlciBjb2RlLCBpbmNsdWRpbmcgbGlicmFyaWVzIGluIGJvb3N0IGFuZCB0aGUgcHJvcG9zZWQgQysrIHN0YW5kYXJkcyBlZmZvcnRzLAorKyAqICAgICAgYW5kIHRoZXJlIHdhcyBubyB3YXkgZm9yIGEgY2xpZW50IG9mIHRoaXMgaGVhZGVyIHRvIHJlc29sdmUgdGhpcyBjb25mbGljdC4gQmVjYXVzZQorKyAqICAgICAgb2YgdGhpcywgbW9zdCBvZiB0aGUgbWFjcm9zIGhhdmUgYmVlbiBjaGFuZ2VkIHNvIHRoYXQgdGhleSBhcmUgcHJlZml4ZWQgd2l0aCAKKysgKiAgICAgIF9fIGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBjYXBpdGFsIGxldHRlciwgd2hpY2ggc2hvdWxkIGFsbGV2aWF0ZSB0aGUgY3VycmVudAorKyAqICAgICAgYW5kIGZ1dHVyZSBjb25mbGljdHMuICBIb3dldmVyLCB0byBhbGxvdyBjdXJyZW50IHNvdXJjZXMgdG8gY29udGludWUgdG8gY29tcGlsZSwKKysgKiAgICAgIGNvbXBhdGliaWxpdHkgbWFjcm9zIGFyZSBkZWZpbmVkIGF0IHRoZSBlbmQgd2l0aCB0aGUgb2xkIG5hbWVzLiAgQSB0b3BzIHNjcmlwdCAKKysgKiAgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHdpbGwgY29udmVydCBhbGwgb2YgdGhlIG9sZCBtYWNybyBuYW1lcyB1c2VkIGluIGEgZGlyZWN0b3J5CisrICogICAgICB0byB0aGUgbmV3IG5hbWVzLiAgQ2xpZW50cyBhcmUgcmVjb21tZW5kZWQgdG8gbWlncmF0ZSBvdmVyIHRvIHRoZXNlIG5ldyBtYWNyb3MgYXMKKysgKiAgICAgIHRoZXkgdXBkYXRlIHRoZWlyIHNvdXJjZXMgYmVjYXVzZSBhIGZ1dHVyZSByZWxlYXNlIG9mIE1hYyBPUyBYIHdpbGwgcmVtb3ZlIHRoZQorKyAqICAgICAgb2xkIG1hY3JvIGRlZmluaXRpb25zICggd2l0aG91dCB0aGUgZG91YmxlLXVuZGVyc2NvcmUgcHJlZml4ICkuICBDbGllbnRzIHdobworKyAqICAgICAgd2FudCB0byBjb21waWxlIHdpdGhvdXQgdGhlIG9sZCBtYWNybyBkZWZpbml0aW9ucyBjYW4gZGVmaW5lIHRoZSBtYWNybworKyAqICAgICAgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIHRvIDAgYmVmb3JlIHRoaXMgZmlsZSBpcworKyAqICAgICAgaW5jbHVkZWQuCisgICovCisgCisgCitAQCAtMTY1LDkgKzIxMSw5IEBACisgICovCisgI2lmbmRlZiBERUJVR19BU1NFUlRfTUVTU0FHRQorICAgICNpZmRlZiBLRVJORUwKKy0gICAgICAjaW5jbHVkZSA8c3lzbG9nLmg+CisrICAgICAgI2luY2x1ZGUgPGxpYmtlcm4vbGlia2Vybi5oPgorICAgICAgICNkZWZpbmUgREVCVUdfQVNTRVJUX01FU1NBR0UobmFtZSwgYXNzZXJ0aW9uLCBsYWJlbCwgbWVzc2FnZSwgZmlsZSwgbGluZSwgdmFsdWUpIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJBc3NlcnRNYWNyb3M6ICVzLCAlcyBmaWxlOiAlcywgbGluZTogJWRcbiIsIGFzc2VydGlvbiwgKG1lc3NhZ2UhPTApID8gbWVzc2FnZSA6ICIiLCBmaWxlLCBsaW5lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAiQXNzZXJ0TWFjcm9zOiAlcywgJXMgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBhc3NlcnRpb24sIChtZXNzYWdlIT0wKSA/IG1lc3NhZ2UgOiAiIiwgZmlsZSwgbGluZSk7CisgICAgI2Vsc2UKKyAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAjZGVmaW5lIERFQlVHX0FTU0VSVF9NRVNTQUdFKG5hbWUsIGFzc2VydGlvbiwgbGFiZWwsIG1lc3NhZ2UsIGZpbGUsIGxpbmUsIHZhbHVlKSBcCitAQCAtMTgwLDcgKzIyNiw3IEBACisgCisgCisgLyoKKy0gKiAgZGVidWdfc3RyaW5nKG1lc3NhZ2UpCisrICogIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZG9lcyBub3RoaW5nIGFuZCBwcm9kdWNlcyBubyBjb2RlLgorQEAgLTE5MywyNiArMjM5LDI3IEBACisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgZGVidWdfc3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19EZWJ1Z19TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0RlYnVnX1N0cmluZyhtZXNzYWdlKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistCisgLyoKKy0gKiAgY2hlY2soYXNzZXJ0aW9uKQorKyAqICBfX0NoZWNrKGFzc2VydGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCitAQCAtMjI1LDMyICsyNzIsMjkgQEAKKyAgKiAgICBhc3NlcnRpb246CisgICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIGNoZWNrKGFzc2VydGlvbikKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19DaGVjaworKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIGNoZWNrKCEoYXNzZXJ0aW9uKSkKKy0KKysjaWZuZGVmIF9fbkNoZWNrCisrCSNkZWZpbmUgX19uQ2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayghKGFzc2VydGlvbikpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKysgKiAgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGRvZXMgbm90aGluZyBhbmQgcHJvZHVjZXMgbm8gY29kZS4KK0BAIC0yNjYsMzIgKzMxMCwyOSBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19DaGVja19TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0NoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Fzc2VydGlvbiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCAwICk7ICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBuY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgY2hlY2tfc3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKKy0KKysjaWZuZGVmIF9fbkNoZWNrX1N0cmluZworKwkjZGVmaW5lIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX0NoZWNrX1N0cmluZyghKGFzc2VydGlvbiksIG1lc3NhZ2UpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKQorKyAqICBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCitAQCAtMzA0LDMwICszNDUsMjYgQEAKKyAgKiAgICBlcnJvckNvZGU6CisgICogICAgICBUaGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB3aXRoIDAuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIGNoZWNrX25vZXJyKGVycm9yQ29kZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fQ2hlY2tfbm9FcnIKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistCisgLyoKKy0gKiAgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKysgKiAgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGNoZWNrX25vZXJyX3N0cmluZygpIGRvZXMgbm90aGluZyBhbmQgcHJvZHVjZXMKK0BAIC0zNDQsMzAgKzM4MSwyNiBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fQ2hlY2tfbm9FcnJfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fQ2hlY2tfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCBldmFsT25jZUVycm9yQ29kZSApOyBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICB2ZXJpZnkoYXNzZXJ0aW9uKQorKyAqICBfX1ZlcmlmeShhc3NlcnRpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uLCBidXQgaWdub3JlCitAQCAtMzgxLDM4ICs0MTQsMzUgQEAKKyAgKiAgICBhc3NlcnRpb246CisgICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fVmVyaWZ5CisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19WZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB2ZXJpZnkoIShhc3NlcnRpb24pKQorLQorKyNpZm5kZWYgX19uVmVyaWZ5CisrCSNkZWZpbmUgX19uVmVyaWZ5KGFzc2VydGlvbikJX19WZXJpZnkoIShhc3NlcnRpb24pKQorKyNlbmRpZgorIAorIC8qCistICogIHZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorKyAqICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQorQEAgLTQyOSwzOCArNDU5LDM1IEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHZlcmlmeV9zdHJpbmcoIShhc3NlcnRpb24pLCBtZXNzYWdlKQorLQorKyNpZm5kZWYgX19uVmVyaWZ5X1N0cmluZworKwkjZGVmaW5lIF9fblZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19WZXJpZnlfU3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKKysjZW5kaWYKKyAKKyAvKgorLSAqICB2ZXJpZnlfbm9lcnIoZXJyb3JDb2RlKQorKyAqICBfX1ZlcmlmeV9ub0VycihlcnJvckNvZGUpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uLCBidXQgaWdub3JlCitAQCAtNDc0LDM2ICs1MDEsMzIgQEAKKyAgKiAgICBlcnJvckNvZGU6CisgICogICAgICBUaGUgZXhwcmVzc2lvbiB0byBjb21wYXJlIHRvIDAuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNlcnJvckNvZGUgIiA9PSAwICIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9ub0VycgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnIoZXJyb3JDb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlICk7IFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLQorIC8qCistICogIHZlcmlmeV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKyAqICBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQorQEAgLTUyMCwzNiArNTQzLDcxIEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gZXZhbE9uY2VFcnJvckNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGV2YWxPbmNlRXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19WZXJpZnlfbm9FcnJfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCisrLyoKKysgKiAgX19WZXJpZnlfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgYWN0aW9uKQorKyAqCisrICogIFN1bW1hcnk6CisrICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCisrICogICAgZXhlY3V0ZSB0aGUgYWN0aW9uIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKgorKyAqICAgIE5vbi1wcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKKysgKiAgICBjYWxsIERFQlVHX0FTU0VSVF9NRVNTQUdFIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGFjdGlvbiBzdGF0ZW1lbnQgb3IgY29tcG91bmQKKysgKiAgICBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKgorKyAqICBQYXJhbWV0ZXJzOgorKyAqCisrICogICAgZXJyb3JDb2RlOgorKyAqICAgICAgVGhlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB0byAwLgorKyAqCisrICogICAgYWN0aW9uOgorKyAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKi8KKysjaWZuZGVmIF9fVmVyaWZ5X25vRXJyX0FjdGlvbgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZWxzZSBkbyB7fSB3aGlsZSAoMCkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSB7ICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKysJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorKwkjZW5kaWYKKysjZW5kaWYKKyAKKyAvKgorLSAqICB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKQorKyAqICBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC01NjcsMzcgKzYyNSwyNyBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeV9hY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgIHsgYWN0aW9uOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9BY3Rpb24KKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCWFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGVsc2UgZG8ge30gd2hpbGUgKDApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19WZXJpZnlfQWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgIFwKKysJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsCitAQCAtNjE0LDQwICs2NjIsMzYgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmUKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgMCwgX19GSUxFX18sIF9fTElORV9fLCAgMCk7ICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZSghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorLQorKyNpZm5kZWYgX19uUmVxdWlyZQorKwkjZGVmaW5lIF9fblJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZSghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorKyNlbmRpZgorIAorIC8qCistICogIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysgKiAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC02NjksNDYgKzcxMyw0NCBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1JlcXVpcmVfQWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsIDAsICAgX19GSUxFX18sIF9fTElORV9fLCAwKTsgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9BY3Rpb24KKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorKwlfX1JlcXVpcmVfQWN0aW9uKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIG5yZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICBcCistICByZXF1aXJlX2FjdGlvbighKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCistCistCisgLyoKKy0gKiAgcmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorKyAqICBfX1JlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIGdvdG8gZXhjZXB0aW9uTGFiZWwuCitAQCAtNzIxLDIxICs3NjMsMjMgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jZGVmaW5lIHJlcXVpcmVfcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB9IHdoaWxlICggMCApCistCistI2RlZmluZSBucmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9xdWlldCghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorKyNpZm5kZWYgX19SZXF1aXJlX1F1aWV0CisrCSNkZWZpbmUgX19SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB9IHdoaWxlICggMCApCisrI2VuZGlmCisgCisrI2lmbmRlZiBfX25SZXF1aXJlX1F1aWV0CisrCSNkZWZpbmUgX19uUmVxdWlyZV9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgX19SZXF1aXJlX1F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKyAqICBfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIGV4ZWN1dGUgdGhlIGFjdGlvbgorQEAgLTc1MiwyNCArNzk2LDI3IEBACisgICogICAgYWN0aW9uOgorICAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKyAgKi8KKy0jZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICBcCistICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB9IHdoaWxlICggMCApCistCistI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbl9RdWlldAorKwkjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICBcCisrCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgfSB3aGlsZSAoIDAgKQorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQKKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICBcCisrCQlfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysjZW5kaWYKKyAKKyAvKgorLSAqICByZXF1aXJlX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKQorKyAqICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC03ODksNDAgKzgzNiwzOCBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmVfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgIG1lc3NhZ2UsICBfX0ZJTEVfXywgX19MSU5FX18sIDApOyBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9TdHJpbmcKKysJI2RlZmluZSBfX25SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpICAgICAgICAgICAgICAgICAgXAorKwkJX19SZXF1aXJlX1N0cmluZyghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9zdHJpbmcoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKQorLQorLQorIC8qCistICogIHJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlLAorQEAgLTg0Nyw0NiArODkyLDQ0IEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKy0jZWxzZQorLSAgICNkZWZpbmUgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsICBtZXNzYWdlLCAgX19GSUxFX18sICBfX0xJTkVfXywgMCk7IFwKKysJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcKKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgICBcCisrCQlfX1JlcXVpcmVfQWN0aW9uX1N0cmluZyghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgICAgXAorLSAgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKy0KKy0KKyAvKgorLSAqICByZXF1aXJlX25vZXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtOTAzLDM3ICs5NDYsMzQgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZV9ub2VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNlcnJvckNvZGUgIiA9PSAwICIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgICNleGNlcHRpb25MYWJlbCwgIDAsICBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKyAvKgorLSAqICByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisrICogIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtOTU1LDQ0ICs5OTUsNDAgQEAKKyAgKiAgICBhY3Rpb246CisgICogICAgICBUaGUgc3RhdGVtZW50IG9yIGNvbXBvdW5kIHN0YXRlbWVudCAoYmxvY2spLgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKy0jZWxzZQorLSAgICNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgI2V4Y2VwdGlvbkxhYmVsLCAgMCwgIF9fRklMRV9fLCBfX0xJTkVfXywgIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZV9ub0Vycl9RdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgSWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKK0BAIC0xMDA2LDE4ICsxMDQyLDE5IEBACisgICogICAgZXhjZXB0aW9uTGFiZWw6CisgICogICAgICBUaGUgbGFiZWwuCisgICovCistI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfSB3aGlsZSAoIDAgKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyX1F1aWV0CisrCSNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgIFwKKysJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB9IHdoaWxlICggMCApCisrI2VuZGlmCisgCisgLyoKKy0gKiAgcmVxdWlyZV9ub2Vycl9hY3Rpb25fcXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKyAqICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtMTAzNSwyMSArMTA3MiwyMiBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgXAorLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfSB3aGlsZSAoIDAgKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9RdWlldAorKwkjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICBcCisrCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgfSB3aGlsZSAoIDAgKQorKyNlbmRpZgorIAorIC8qCistICogIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorQEAgLTEwNjksMzggKzExMDcsMzQgQEAKKyAgKiAgICBtZXNzYWdlOgorICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gZXZhbE9uY2VFcnJvckNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGV2YWxPbmNlRXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgIF9fTElORV9fLCAgZXZhbE9uY2VFcnJvckNvZGUpOyBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLQorIC8qCistICogIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorQEAgLTExMjUsNDEgKzExNTksMjcwIEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9zdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKVwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2VuZGlmCisrI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZworKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKysjZW5kaWYKKysKKysvKgorKyAqICBfX0NoZWNrX0NvbXBpbGVfVGltZShleHByKQorKyAqCisrICogIFN1bW1hcnk6CisrICogICAgYW55IGJ1aWxkOiBpZiB0aGUgZXhwcmVzc2lvbiBpcyBub3QgdHJ1ZSwgZ2VuZXJhdGVkIGEgY29tcGlsZSB0aW1lIGVycm9yLgorKyAqCisrICogIFBhcmFtZXRlcnM6CisrICoKKysgKiAgICBleHByOgorKyAqICAgICAgVGhlIGNvbXBpbGUgdGltZSBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIG5vbi16ZXJvLgorKyAqCisrICogIERpc2N1c3Npb246CisrICogICAgIFRoaXMgZGVjbGFyZXMgYW4gYXJyYXkgd2l0aCBhIHNpemUgdGhhdCBpcyBkZXRlcm1pbmVkIGJ5IGEgY29tcGlsZS10aW1lIGV4cHJlc3Npb24uCisrICogICAgIElmIGZhbHNlLCBpdCBkZWNsYXJlcyBhIG5lZ2F0aXZlbHkgc2l6ZWQgYXJyYXksIHdoaWNoIGdlbmVyYXRlcyBhIGNvbXBpbGUtdGltZSBlcnJvci4KKysgKgorKyAqIEV4YW1wbGVzOgorKyAqICAgICBfX0NoZWNrX0NvbXBpbGVfVGltZSggc2l6ZW9mKCBpbnQgKSA9PSA0ICk7CisrICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCBvZmZzZXRvZiggTXlTdHJ1Y3QsIG15RmllbGQgKSA9PSA0ICk7CisrICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCAoIGtNeUJ1ZmZlclNpemUgJSA1MTIgKSA9PSAwICk7CisrICoKKysgKiAgTm90ZTogVGhpcyBvbmx5IHdvcmtzIHdpdGggY29tcGlsZS10aW1lIGV4cHJlc3Npb25zLgorKyAqICBOb3RlOiBUaGlzIG9ubHkgd29ya3MgaW4gcGxhY2VzIHdoZXJlIGV4dGVybiBkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQgKGUuZy4gZ2xvYmFsIHNjb3BlKS4KKysgKi8KKysjaWZuZGVmIF9fQ2hlY2tfQ29tcGlsZV9UaW1lCisrICAgICNpZmRlZiBfX0dOVUNfXyAKKysgICAgICAgICNkZWZpbmUgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKSAgICBcCisrICAgICAgICAgICAgZXh0ZXJuIGludCBjb21waWxlX3RpbWVfYXNzZXJ0X2ZhaWxlZFsgKCBleHByICkgPyAxIDogLTEgXSBfX2F0dHJpYnV0ZV9fKCAoIHVudXNlZCApICkKKysgICAgI2Vsc2UKKysgICAgICAgICNkZWZpbmUgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKSAgICBcCisrICAgICAgICAgICAgZXh0ZXJuIGludCBjb21waWxlX3RpbWVfYXNzZXJ0X2ZhaWxlZFsgKCBleHByICkgPyAxIDogLTEgXQorKyAgICAjZW5kaWYKKysjZW5kaWYKKysKKysvKgorKyAqCUZvciB0aW1lIGltbWVtb3JpYWwsIE1hYyBPUyBYIGhhcyBkZWZpbmVkIHZlcnNpb24gb2YgbW9zdCBvZiB0aGVzZSBtYWNyb3Mgd2l0aG91dCB0aGUgX18gcHJlZml4LCB3aGljaAorKyAqCWNvdWxkIGNvbGxpZGUgd2l0aCBzaW1pbGFybHkgbmFtZWQgZnVuY3Rpb25zIG9yIG1hY3JvcyBpbiB1c2VyIGNvZGUsIGluY2x1ZGluZyBuZXcgZnVuY3Rpb25hbGl0eSBpbgorKyAqCUJvb3N0IGFuZCB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkuCisrICoKKysgKglBIGZ1dHVyZSByZWxlYXNlIG9mIE1hYyBPUyBYIHdpbGwgbm8gbG9uZ2VyIGRvIHRoaXMsIGFuZCB3aWxsIHJlcXVpcmUgdGhhdCBjbGllbnRzIG1vdmUgdG8gdGhlCisrICogIG5ldyBtYWNyb3MgYXMgZGVmaW5lZCBhYm92ZS4gIEhvd2V2ZXIsIGluIHRoZSBpbnRlcmltIGJvdGggdGhlIG5ldyBhbmQgb2xkIG1hY3JvcyB3aWxsIHdvcmssIHVubGVzcworKyAqICBjbGllbnRzIGRlZmluZSBhIG1hY3JvIF9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisrICogIGluIHRoZWlyIGNvbXBpbGF0aW9ucy4gIENsaWVudHMgd2hvIGRvIG5vdCB3YW50IHRoZSBvbGRlciBtYWNyb3MgZGVmaW5lZCBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGFkZGluZworKyAqICAgICNkZWZpbmUgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIDAKKysgKiAgYXQgdGhlIHRvcCBvZiB0aGVpciBzb3VyY2VzLCBvciBteSBhZGRpbmcgLURfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVM9MCB0byB0aGUKKysgKiAgZ2NjIGNvbXBpbGF0aW9uIG9wdGlvbnMuCisrICoKKysgKiAgVG8gYWlkIHVzZXJzIG9mIHRoZXNlIG1hY3JvcyBpbiBjb252ZXJ0aW5nIHRoZWlyIHNvdXJjZXMsIHRoZSBmb2xsb3dpbmcgdG9wcyBzY3JpcHQgd2lsbCBjb252ZXJ0IHVzYWdlcworKyAqICBvZiB0aGUgb2xkIG1hY3JvcyBpbnRvIHRoZSBuZXcgZXF1aXZhbGVudHMuICBUbyBkbyBzbywgaW4gVGVybWluYWwgZ28gaW50byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisrICogIHNvdXJjZXMgdG8gYmUgY29udmVydGVkIGFuZCBydW4gdGhpcyBjb21tYW5kLgorKyAqCisrICAgIGZpbmQgLiAtbmFtZSAnKi5bY3xjY3xjcHxjcHB8bXxtbXxoXScgLXByaW50MCB8ICB4YXJncyAtMCB0b3BzIC12ZXJib3NlIFwKKysgICAgICByZXBsYWNlICJjaGVjayg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2soPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX25vZXJyKDxiIGFyZ3M+KSIgd2l0aCAiX19DaGVja19ub0Vycig8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAiY2hlY2tfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19DaGVja19ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX25vRXJyKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAidmVyaWZ5KDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnkoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInZlcmlmeV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX1ZlcmlmeV9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInZlcmlmeV9ub2Vycig8YiBhcmdzPikiIHdpdGggIl9fVmVyaWZ5X25vRXJyKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfYWN0aW9uKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfQWN0aW9uKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJuY2hlY2soPGIgYXJncz4pIiB3aXRoICJfX25DaGVjayg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibmNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fbkNoZWNrX1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmUoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJucmVxdWlyZV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbig8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmVfYWN0aW9uX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX2FjdGlvbl9zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9RdWlldCg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmVfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm52ZXJpZnkoPGIgYXJncz4pIiB3aXRoICJfX25WZXJpZnkoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm52ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uVmVyaWZ5X1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAicmVxdWlyZV9hY3Rpb25fcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldCg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnJfUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX2NvbXBpbGVfdGltZSg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfQ29tcGlsZV9UaW1lKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJkZWJ1Z19zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX0RlYnVnX1N0cmluZyg8YXJncz4pIgorKyAqCisrICovCisrCisrI2lmbmRlZiBfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVMKKysJLyogSWYgd2UgaGF2ZW4ndCBzZXQgdGhpcyB5ZXQsIGl0IGRlZmF1bHRzIHRvIG9uLiAgSW4gdGhlIG5leHQgcmVsZWFzZSwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gb2ZmLiAqLworKwkjZGVmaW5lCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUwkxCisrI2VuZGlmCisrCisrI2lmCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUworKworKwkjaWZuZGVmIGNoZWNrCisrCSNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayhhc3NlcnRpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGNoZWNrX25vZXJyCisrCSNkZWZpbmUgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKSAgX19DaGVja19ub0VycihlcnJvckNvZGUpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGNoZWNrX25vZXJyX3N0cmluZworKwkJI2RlZmluZSBjaGVja19ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBjaGVja19zdHJpbmcKKysJCSNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fQ2hlY2tfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZQorKwkJI2RlZmluZSByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9hY3Rpb24KKysJCSNkZWZpbmUgcmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3N0cmluZworKwkJI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyX2FjdGlvbgorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9ub2Vycl9hY3Rpb25fc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeQorKwkJI2RlZmluZSB2ZXJpZnkoYXNzZXJ0aW9uKSBfX1ZlcmlmeShhc3NlcnRpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9hY3Rpb24KKysJCSNkZWZpbmUgdmVyaWZ5X2FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikgIF9fVmVyaWZ5X0FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgdmVyaWZ5X25vZXJyCisrCQkjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICBfX1ZlcmlmeV9ub0VycihlcnJvckNvZGUpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9ub2Vycl9hY3Rpb24KKysJCSNkZWZpbmUgdmVyaWZ5X25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgdmVyaWZ5X25vZXJyX3N0cmluZworKwkJI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgIF9fVmVyaWZ5X25vRXJyX1N0cmluZyhlcnJvckNvZGUsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9zdHJpbmcKKysJCSNkZWZpbmUgdmVyaWZ5X3N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBuY2hlY2sKKysJCSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgIF9fbkNoZWNrKGFzc2VydGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbmNoZWNrX3N0cmluZworKwkJI2RlZmluZSBuY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlCisrCQkjZGVmaW5lIG5yZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX2FjdGlvbgorKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19uUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBucmVxdWlyZV9hY3Rpb25fcXVpZXQKKysJCSNkZWZpbmUgbnJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fblJlcXVpcmVfQWN0aW9uX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbnJlcXVpcmVfYWN0aW9uX3N0cmluZworKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgIF9fblJlcXVpcmVfQWN0aW9uX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX3F1aWV0CisrCQkjZGVmaW5lIG5yZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX3N0cmluZworKwkJI2RlZmluZSBucmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKSAgX19uUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBudmVyaWZ5CisrCQkjZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgX19uVmVyaWZ5KGFzc2VydGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbnZlcmlmeV9zdHJpbmcKKysJCSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19uVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3F1aWV0CisrCQkjZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9ub2Vycl9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfbm9FcnJfUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgY2hlY2tfY29tcGlsZV90aW1lCisrCQkjZGVmaW5lIGNoZWNrX2NvbXBpbGVfdGltZSggZXhwciApICBfX0NoZWNrX0NvbXBpbGVfVGltZSggZXhwciApCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGRlYnVnX3N0cmluZworKwkJI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkgIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisrCSNlbmRpZgorKwkKKysjZW5kaWYJLyogQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyAqLworIAorIAorICNlbmRpZiAvKiBfX0FTU0VSVE1BQ1JPU19fICovCistCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmMzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkaWZmIC1hcnVOIGEvQ0ZCYXNlLmMgYi9DRkJhc2UuYworLS0tIGEvQ0ZCYXNlLmMJMjAxMS0wOC0xMCAxNjoyOTowNC44NDEwODM2MDIgLTA3MDAKKysrKyBiL0NGQmFzZS5jCTIwMTEtMDgtMTAgMTU6NDY6NDQuMDAwMDAwMDAwIC0wNzAwCitAQCAtNDQsNiArNDQsNyBAQAorICNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWAorKyNpbmNsdWRlIDxtY2hlY2suaD4KKyAjaW5jbHVkZSA8cHRocmVhZC5oPgorICNlbGlmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAjaW5jbHVkZSA8d2luZG93cy5oPgorQEAgLTI4MSw2ICsyODIsMTQgQEAKKyB9CisgCisgc3RhdGljIHZvaWQgX19DRkFsbG9jYXRvclN5c3RlbURlYWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKSB7CisrI2lmIGRlZmluZWQoREVCVUcpCisrICAgIGNvbnN0IGVudW0gbWNoZWNrX3N0YXR1cyBzdGF0dXMgPSBtcHJvYmUocHRyKTsKKysKKysgICAgQ0ZBc3NlcnQzKHN0YXR1cyA9PSBNQ0hFQ0tfT0sgfHwgc3RhdHVzID09IE1DSEVDS19ESVNBQkxFRCwKKysgICAgICAgICAgICAgIF9fa0NGTG9nQXNzZXJ0aW9uLCAiJXM6IHB0ciAlcCBzdGF0dXMgJWQiLAorKyAgICAgICAgICAgICAgX19QUkVUVFlfRlVOQ1RJT05fXywgcHRyLCBzdGF0dXMpOworKyNlbmRpZgorKworICAgICBmcmVlKHB0cik7CisgfQorICNlbmRpZgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVhYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorZGlmZiAtYXJ1TiBhL0NGQmFzZS5jIGIvQ0ZCYXNlLmMKKy0tLSBhL0NGQmFzZS5jCTIwMTEtMDgtMTAgMTY6Mjk6MzUuNDU4MTc4NDkzIC0wNzAwCisrKysgYi9DRkJhc2UuYwkyMDExLTA4LTEwIDE2OjMxOjI3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTI3MCw3ICsyNzAsNyBAQAorICAgICBtYWxsb2Nfem9uZV9mcmVlKChtYWxsb2Nfem9uZV90KilpbmZvLCBwdHIpOworIH0KKyAKKy0jZW5kaWYKKysjZW5kaWYgLyogREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYICovCisgCisgI2lmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MgfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVggfHwgREVQTE9ZTUVOVF9UQVJHRVRfRlJFRUJTRAorIHN0YXRpYyB2b2lkICpfX0NGQWxsb2NhdG9yU3lzdGVtQWxsb2NhdGUoQ0ZJbmRleCBzaXplLCBDRk9wdGlvbkZsYWdzIGhpbnQsIHZvaWQgKmluZm8pIHsKK0BAIC02ODUsNyArNjg1LDcgQEAKKyAJICAgIG1hbGxvY196b25lX2ZyZWUoKG1hbGxvY196b25lX3QgKilhbGxvY2F0b3IsIHB0cik7CisgCSAgICByZXR1cm4gTlVMTDsKKyAJfQorLSNlbmRpZgorKyNlbmRpZiAvKiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggKi8KKyAJZGVhbGxvY2F0ZUZ1bmMgPSBfX0NGQWxsb2NhdG9yR2V0RGVhbGxvY2F0ZUZ1bmN0aW9uKCZhbGxvY2F0b3ItPl9jb250ZXh0KTsKKyAJaWYgKE5VTEwgIT0gZGVhbGxvY2F0ZUZ1bmMpIHsKKyAJICAgIElOVk9LRV9DQUxMQkFDSzIoZGVhbGxvY2F0ZUZ1bmMsIHB0ciwgYWxsb2NhdG9yLT5fY29udGV4dC5pbmZvKTsKK0BAIC03MjIsNyArNzIyLDcgQEAKKyAjZW5kaWYKKyAJcmV0dXJuIG1hbGxvY196b25lX2ZyZWUoKG1hbGxvY196b25lX3QgKilhbGxvY2F0b3IsIHB0cik7CisgICAgIH0KKy0jZW5kaWYKKysjZW5kaWYgLyogREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYICovCisgICAgIGRlYWxsb2NhdGVGdW5jID0gX19DRkFsbG9jYXRvckdldERlYWxsb2NhdGVGdW5jdGlvbigmYWxsb2NhdG9yLT5fY29udGV4dCk7CisgICAgIGlmIChOVUxMICE9IHB0ciAmJiBOVUxMICE9IGRlYWxsb2NhdGVGdW5jKSB7CisgCUlOVk9LRV9DQUxMQkFDSzIoZGVhbGxvY2F0ZUZ1bmMsIHB0ciwgYWxsb2NhdG9yLT5fY29udGV4dC5pbmZvKTsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZDM0MAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2RpZmYgLWFydU4gYS9DRlJ1bnRpbWUuYyBiL0NGUnVudGltZS5jCistLS0gYS9DRlJ1bnRpbWUuYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZSdW50aW1lLmMJMjAxMS0wOC0xMCAxNjozMjo0NC4wMDAwMDAwMDAgLTA3MDAKK0BAIC03MywxMSArNzMsNiBAQAorIENGX0lOTElORSBzaXplX3QgbWFsbG9jX3NpemUodm9pZCogbWVtYmxvY2spIHsKKyAgICAgcmV0dXJuIF9tc2l6ZShtZW1ibG9jayk7CisgfQorLSNlbGlmIERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCistI2luY2x1ZGUgPG1hbGxvYy5oPgorLUNGX0lOTElORSBzaXplX3QgbWFsbG9jX3NpemUoY29uc3Qgdm9pZCAqbWVtYmxvY2spIHsKKy0gICAgcmV0dXJuIG1hbGxvY191c2FibGVfc2l6ZSgodm9pZCAqKW1lbWJsb2NrKTsKKy19CisgI2VuZGlmCisgCisgZXh0ZXJuIHZvaWQgX19IQUxUKHZvaWQpOworQEAgLTI2NCwxMiArMjU5LDIxIEBACisgICAgIGlmIChOVUxMID09IG1lbW9yeSkgeworIAlyZXR1cm4gTlVMTDsKKyAgICAgfQorLSNpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2lmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAgICAgLy8gbWFsbG9jX3NpemUgd29uJ3Qgd29yayBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaGFzIGJlZW4gbW92ZWQKKyAgICAgLy8gKHN1Y2ggYXMgYSBjdXN0b20gYWxsb2NhdG9yIHRoYXQgYWRkcyBpdHMgb3duIG1ldGFkYXRhCisgICAgIC8vIChlLmcuIHVuZGVyL292ZXJmbG93IGd1YXJkIGRhdGEpLCBzbyBkb24ndCBhdHRlbXB0IHRvIGNhbGwgaXQKKyAgICAgLy8gb24gdGhlIGFsbG9jYXRpb24gcmV0dXJuLgorICAgICBzaXplX3QgbXNpemUgPSAodXNlc1N5c3RlbURlZmF1bHRBbGxvY2F0b3IpID8gbWFsbG9jX3NpemUobWVtb3J5KSA6IHNpemU7CisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysgICAgLy8gT24gTGludXgsIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgYW5kIHZlcnNpb25zIG9mIHRoZSBHTlUKKysgICAgLy8gQyBMaWJyYXJ5LCBtYWxsb2NfdXNhYmxlX3NpemUgaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gYXQgdGltZXMgcmV0dXJuCisrICAgIC8vIGluY29ycmVjdCB2YWx1ZXMuIFNpbmNlIHRoZSBpbnRyb3NwZWN0aW9uIHZhbHVlLWFkZCBpdCBwcm92aWRlcyB0bworKyAgICAvLyBDb3JlRm91bmRhdGlvbiBzZWVtcyB0byBiZSBvZiBsaW1pdGVkIHV0aWxpdHksIHdlIGVsaW1pbmF0ZSBpdCBhbmQKKysgICAgLy8gc2ltcHkgdXNlIHRoZSBjYWxsZXItcmVxdWVzdGVkIHNpemUuIEluIGFkZGl0aW9uLCBtZW1zZXR0aW5nIHRoaXMKKysgICAgLy8gc21hbGwgdGFpbCBibG9jayBoYXMgYWxzbyBiZWVuIGZvdW5kIHRvIGNhdXNlIGhlYXAgY29uc2lzdGVuY3kKKysgICAgLy8gcHJvYmxlbXMuCisrICAgIHNpemVfdCBtc2l6ZSA9IHNpemU7CisgI2Vsc2UKKyAgICAgc2l6ZV90IG1zaXplID0gbWFsbG9jX3NpemUobWVtb3J5KTsKKyAjZW5kaWYKK0BAIC0xMDk4LDYgKzExMDAsNyBAQAorIAl1c2VzU3lzdGVtRGVmYXVsdEFsbG9jYXRvciA9IChhbGxvY2F0b3IgPT0ga0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCk7CisgCisgCWlmIChfX0NGWm9tYmllTGV2ZWwgJiAoMSA8PCAwKSkgeworKyNpZiAhREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAJICAgIHVpbnQ4X3QgKnB0ciA9ICh1aW50OF90ICopY2YgLSAodXNlc1N5c3RlbURlZmF1bHRBbGxvY2F0b3IgPyAwIDogc2l6ZW9mKENGQWxsb2NhdG9yUmVmKSk7CisgCSAgICBzaXplX3Qgc2l6ZSA9IG1hbGxvY19zaXplKHB0cik7CisgCSAgICB1aW50OF90IGJ5dGUgPSAweEZDOworQEAgLTExMDksNiArMTExMiw3IEBACisgCQlieXRlID0gKF9fQ0Zab21iaWVMZXZlbCA+PiA4KSAmIDB4RkY7CisgCSAgICB9CisgCSAgICBtZW1zZXQocHRyLCBieXRlLCBzaXplKTsKKysjZW5kaWYgLyogIURFUExPWU1FTlRfVEFSR0VUX0xJTlVYICovCisgCX0KKyAJaWYgKCEoX19DRlpvbWJpZUxldmVsICYgKDEgPDwgNCkpKSB7CisgCSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoYWxsb2NhdG9yLCAodWludDhfdCAqKWNmIC0gKHVzZXNTeXN0ZW1EZWZhdWx0QWxsb2NhdG9yID8gMCA6IHNpemVvZihDRkFsbG9jYXRvclJlZikpKTsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwM2E2MwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2RpZmYgLWFydU4gYS9DRlNldC5jIGIvQ0ZTZXQuYworLS0tIGEvQ0ZTZXQuYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZTZXQuYwkyMDExLTA5LTA2IDE3OjA1OjI1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTEwODksMTUgKzEwODksMTQgQEAKKyAgICAgaWYgKENGRGljdGlvbmFyeSkgQ0ZfT0JKQ19GVU5DRElTUEFUQ0gyKF9fa0NGSGFzaFR5cGVJRCwgdm9pZCwgaGMsICJfYXBwbHk6Y29udGV4dDoiLCBhcHBsaWVyLCBjb250ZXh0KTsKKyAgICAgaWYgKENGU2V0KSBDRl9PQkpDX0ZVTkNESVNQQVRDSDIoX19rQ0ZIYXNoVHlwZUlELCB2b2lkLCBoYywgIl9hcHBseVZhbHVlczpjb250ZXh0OiIsIGFwcGxpZXIsIGNvbnRleHQpOworICAgICBfX0NGR2VuZXJpY1ZhbGlkYXRlVHlwZShoYywgX19rQ0ZIYXNoVHlwZUlEKTsKKy0gICAgYW55X3QgKmtleXMgPSBoYy0+X2tleXM7CisgICAgIGZvciAoQ0ZJbmRleCBpZHggPSAwLCBuYnVja2V0cyA9IGhjLT5fYnVja2V0c051bTsgaWR4IDwgbmJ1Y2tldHM7IGlkeCsrKSB7CistICAgICAgICBpZiAoX19DRkhhc2hLZXlJc1ZhbHVlKGhjLCBrZXlzW2lkeF0pKSB7CisrICAgICAgICBpZiAoX19DRkhhc2hLZXlJc1ZhbHVlKGhjLCBoYy0+X2tleXNbaWR4XSkpIHsKKyAgICAgICAgICAgICBmb3IgKENGSW5kZXggY250ID0gX19DRkhhc2hHZXRPY2N1cnJlbmNlQ291bnQoaGMsIGlkeCk7IGNudC0tOykgeworICNpZiBDRkRpY3Rpb25hcnkKKy0gICAgICAgICAgICAgICAgSU5WT0tFX0NBTExCQUNLMyhhcHBsaWVyLCAoY29uc3RfYW55X3BvaW50ZXJfdClrZXlzW2lkeF0sIChjb25zdF9hbnlfcG9pbnRlcl90KWhjLT5fdmFsdWVzW2lkeF0sIGNvbnRleHQpOworKyAgICAgICAgICAgICAgICBJTlZPS0VfQ0FMTEJBQ0szKGFwcGxpZXIsIChjb25zdF9hbnlfcG9pbnRlcl90KWhjLT5fa2V5c1tpZHhdLCAoY29uc3RfYW55X3BvaW50ZXJfdCloYy0+X3ZhbHVlc1tpZHhdLCBjb250ZXh0KTsKKyAjZW5kaWYKKyAjaWYgQ0ZTZXQgfHwgQ0ZCYWcKKy0gICAgICAgICAgICAgICAgSU5WT0tFX0NBTExCQUNLMihhcHBsaWVyLCAoY29uc3RfYW55X3BvaW50ZXJfdClrZXlzW2lkeF0sIGNvbnRleHQpOworKyAgICAgICAgICAgICAgICBJTlZPS0VfQ0FMTEJBQ0syKGFwcGxpZXIsIChjb25zdF9hbnlfcG9pbnRlcl90KWhjLT5fa2V5c1tpZHhdLCBjb250ZXh0KTsKKyAjZW5kaWYKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ny5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NGY1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ny5wYXRjaApAQCAtMCwwICsxLDMyIEBACitkaWZmIC1hcnVOIGEvQ0ZMb2NhbGUuYyBiL0NGTG9jYWxlLmMKKy0tLSBhL0NGTG9jYWxlLmMJMjAwOS0wMi0yMiAyMTo1NjowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGTG9jYWxlLmMJMjAxMi0wNC0yMCAxMjoxNDowNy4wNjE2MDUxMDMgLTA3MDAKK0BAIC0yMjMsNiArMjIzLDE5IEBACisgICAgIFdpbmRvd3NMb2NhbGVzID0gQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JTeXN0ZW1EZWZhdWx0LCAoY29uc3Qgdm9pZCoqKXNfV2luZG93c0luc3RhbGxlZExvY2FsZXMsIHNfbnVtX2luc3RhbGxlZF9sb2NhbGVzSSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAgIHJldHVybiAoV2luZG93c0xvY2FsZXMpOworIH0KKysjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWAorK3N0YXRpYyBDRlN0cmluZ1JlZiBfX0NGTG9jYWxlQ29weVBPU0lYTG9jYWxlTmFtZSh2b2lkKQorK3sKKysgICAgY29uc3QgY2hhciAqcCA9IE5VTEw7CisrICAgIENGU3RyaW5nUmVmIGlkZW50aWZpZXIgPSBOVUxMOworKworKyAgICBwID0gZ2V0ZW52KCJMQ19BTEwiKTsKKysKKysgICAgaWYgKE5VTEwgPT0gcCkgcCA9IGdldGVudigiTEFORyIpOworKyAgICBpZiAoTlVMTCAhPSBwKSBpZGVudGlmaWVyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKKysKKysgICAgcmV0dXJuIChpZGVudGlmaWVyKTsKKyt9CisgI2VuZGlmIC8vIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAKKyBzdGF0aWMgQm9vbGVhbiBfX0NGTG9jYWxlRXF1YWwoQ0ZUeXBlUmVmIGNmMSwgQ0ZUeXBlUmVmIGNmMikgeworQEAgLTMzNSw2ICszNDgsOCBAQAorIAorICNpZmRlZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTCisgICAgIGlkZW50aWZpZXIgPSBfX0NGTG9jYWxlV2luZG93c0xDSURUb0lTT0xvY2FsZU5hbWUoTE9DQUxFX1VTRVJfREVGQVVMVCk7CisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysgICAgaWRlbnRpZmllciA9IF9fQ0ZMb2NhbGVDb3B5UE9TSVhMb2NhbGVOYW1lKCk7CisgI2VuZGlmIAorIAorICAgICBzdHJ1Y3QgX19DRkxvY2FsZSAqbG9jYWxlOwpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTgucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFmOWNlCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTgucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorZGlmZiAtYXJ1TiBhL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYyBiL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYworLS0tIGEvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCTIwMDktMDItMTkgMDg6MzI6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMJMjAxMi0wNC0yNSAxMDozNTo1My4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMzgsOSArMjM4LDEwIEBACisgfQorIAorIAorLSNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1gKKysjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorIAorIC8qIF9fQ0ZXcml0ZUJ5dGVzVG9GaWxlV2l0aEF0b21pY2l0eSBpcyBhICJzYWZlIHNhdmUiIGZhY2lsaXR5LiBXcml0ZSB0aGUgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlIG9uIHRoZSBmaWxlIHRvIHRoZSBwcm92aWRlZCBVUkwuIElmIHRoZSBhdG9taWMgZmxhZyBpcyB0cnVlLCB0cnkgdG8gZG8gaXQgaW4gYSBmYXNoaW9uIHRoYXQgd2lsbCBlbmFibGUgYSBzYWZlIHNhdmUuCisgICovCisgc3RhdGljIEJvb2xlYW4gX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5KENGVVJMUmVmIHVybCwgY29uc3Qgdm9pZCAqYnl0ZXMsIGludCBsZW5ndGgsIFNJbnQzMiBtb2RlLCBCb29sZWFuIGF0b21pYykgeworQEAgLTI2NCw2ICsyNjksNiBAQAorICAgICBpZiAoYXRvbWljKSB7CisgICAgICAgICBDRlVSTFJlZiBkaXIgPSBDRlVSTENyZWF0ZUNvcHlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50KGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIHVybCk7CistICAgICAgICBDRlVSTFJlZiB0ZW1wRmlsZSA9IENGVVJMQ3JlYXRlQ29weUFwcGVuZGluZ1BhdGhDb21wb25lbnQoa0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCwgZGlyLCBDRlNUUigiY2YjWFhYWFgiKSwgZmFsc2UpOworKyAgICAgICAgQ0ZVUkxSZWYgdGVtcEZpbGUgPSBDRlVSTENyZWF0ZUNvcHlBcHBlbmRpbmdQYXRoQ29tcG9uZW50KGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIGRpciwgQ0ZTVFIoImNmI1hYWFhYWCIpLCBmYWxzZSk7CisgICAgICAgICBDRlJlbGVhc2UoZGlyKTsKKyAgICAgICAgIGlmICghQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGVtcEZpbGUsIHRydWUsICh1aW50OF90ICopYXV4UGF0aCwgQ0ZNYXhQYXRoU2l6ZSkpIHsKKyAgICAgICAgICAgICBDRlJlbGVhc2UodGVtcEZpbGUpOworQEAgLTMzOSwxMiArMzQ2LDEyIEBACisgICAgICAgICBDRlJlbGVhc2UoYmluU3RyZWFtKTsKKyAgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAgICAgU0ludDMyIG1vZGU7CistI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAgICAgICAgICAgICBtb2RlID0gaXNXb3JsZFJlYWRhYmxlID8gU19JUlVTUnxTX0lXVVNSfFNfSVJHUlB8U19JUk9USCA6IFNfSVJVU1J8U19JV1VTUjsKKyAjZWxzZQorIAkgICAgbW9kZSA9IDA2NjY7CisgI2VuZGlmCistI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAgICAgICAgICAgICB7CS8vIFRyeSBxdWljayBhdG9taWMgd2F5IGZpcnN0LCB0aGVuIGZhbGxiYWNrIHRvIHNsb3dlciB3YXlzIGFuZCBlcnJvciBjYXNlcworICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBzY2hlbWUgPSBDRlVSTENvcHlTY2hlbWUodXJsKTsKKyAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWUpIHsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3Mzg3NwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK2RpZmYgLWFydU4gYS9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMgYi9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKy0tLSBhL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCTIwMTItMDQtMjUgMTA6MzU6NTMuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjM5LDkgKzIzOSwxMyBAQAorIAorIAorICNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysjaW5jbHVkZSA8Z3JwLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorIAorKyNkZWZpbmUgX19rQ0ZBZG1pbkdyb3VwTmFtZSAgICAgICAiYWRtaW4iCisrI2RlZmluZSBfX2tDRkFkbWluRmFsbGJhY2tHcm91cElEIDgwCisrCisgLyogX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5IGlzIGEgInNhZmUgc2F2ZSIgZmFjaWxpdHkuIFdyaXRlIHRoZSBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUgb24gdGhlIGZpbGUgdG8gdGhlIHByb3ZpZGVkIFVSTC4gSWYgdGhlIGF0b21pYyBmbGFnIGlzIHRydWUsIHRyeSB0byBkbyBpdCBpbiBhIGZhc2hpb24gdGhhdCB3aWxsIGVuYWJsZSBhIHNhZmUgc2F2ZS4KKyAgKi8KKyBzdGF0aWMgQm9vbGVhbiBfX0NGV3JpdGVCeXRlc1RvRmlsZVdpdGhBdG9taWNpdHkoQ0ZVUkxSZWYgdXJsLCBjb25zdCB2b2lkICpieXRlcywgaW50IGxlbmd0aCwgU0ludDMyIG1vZGUsIEJvb2xlYW4gYXRvbWljKSB7CitAQCAtMjY1LDggKzI3MCwxMCBAQAorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICBtb2RlID0gMDY2NDsKKyAgICAgICAgICAgICBpZiAod3JpdGluZ0ZpbGVBc1Jvb3QgJiYgKDAgPT0gc3RybmNtcChjcGF0aCwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzIiwgMjApKSkgeworKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZ3JvdXAgKmdyZW50OworICAgICAgICAgICAgICAgICBvd25lciA9IGdldGV1aWQoKTsKKy0gICAgICAgICAgICAgICAgZ3JvdXAgPSA4MDsKKysgICAgICAgICAgICAgICAgZ3JlbnQgPSBnZXRncm5hbShfX2tDRkFkbWluR3JvdXBOYW1lKTsKKysgICAgICAgICAgICAgICAgZ3JvdXAgPSBncmVudCA/IGdyZW50LT5ncl9naWQgOiBfX2tDRkFkbWluRmFsbGJhY2tHcm91cElEOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAxYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDE2LTA2LTAzIDE2OjQ1OjQ2LjcwNzA4MDQ5NiAtMDcwMAorQEAgLTY3LDcgKzY3LDcgQEAKKyAjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYCisgI2RlZmluZSBfX2tDRkNoYXJhY3RlclNldERpciAiL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcyIKKyAjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWCB8fCBERVBMT1lNRU5UX1RBUkdFVF9GUkVFQlNECistI2RlZmluZSBfX2tDRkNoYXJhY3RlclNldERpciAiL3Vzci9sb2NhbC9zaGFyZS9Db3JlRm91bmRhdGlvbiIKKysjZGVmaW5lIF9fa0NGQ2hhcmFjdGVyU2V0RGlyIF9fa0NGRGF0YURpciAiL0NvcmVGb3VuZGF0aW9uIgorICNlbGlmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAjZGVmaW5lIF9fa0NGQ2hhcmFjdGVyU2V0RGlyICJcXFdpbmRvd3NcXENvcmVGb3VuZGF0aW9uIgorICNkZWZpbmUgTUFYUEFUSExFTiBNQVhfUEFUSAorQEAgLTEyOSw2ICsxMjksMjYgQEAKKyAgICAgc3RybGNweShjcGF0aCwgX0NGRExMUGF0aCgpLCBNQVhQQVRITEVOKTsKKyAjZWxzZQorICAgICBzdHJsY3B5KGNwYXRoLCBfX2tDRkNoYXJhY3RlclNldERpciwgTUFYUEFUSExFTik7CisrICAgIC8vIEZvciBub24tYWJzb2x1dGUgcGF0aHMsIHByZWZpeCB0aGVtIHdpdGggdGhlIHBhdGggdG8gdGhpcyBleGVjdXRhYmxlCisrICAgIGlmICgqY3BhdGggIT0gJy8nKSB7CisrICAgICAgICBpbnQgbGVuOworKyAgICAgICAgY2hhciAqbGFzdHNsYXNoOworKworKyAgICAgICAgbGVuID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgY3BhdGgsIE1BWFBBVEhMRU4pOworKyAgICAgICAgaWYgKGxlbiA8IDApIHsKKysgICAgICAgICAgICBjcGF0aFswXSA9ICdcMCc7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGNwYXRoW2xlbl0gPSAnXDAnOworKyAgICAgICAgfQorKworKyAgICAgICAgLy8gV291bGQgaGF2ZSB1c2VkIGRpcm5hbWUoKSwgYnV0IGl0IHdhcyBiZWhhdmluZyBiYWRseSwgYW5kIHRoaXMgd29ya3MgaW4gcGxhY2UKKysgICAgICAgIGxhc3RzbGFzaCA9IHN0cnJjaHIoY3BhdGgsICcvJyk7CisrICAgICAgICBpZiAobGFzdHNsYXNoICE9IE5VTEwpIHsKKysgICAgICAgICAgICAqKGxhc3RzbGFzaCArIDEpID0gJ1wwJzsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0cmxjYXQoY3BhdGgsIF9fa0NGQ2hhcmFjdGVyU2V0RGlyLCBNQVhQQVRITEVOKTsKKysgICAgfQorICNlbmRpZgorIAorICNpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTIHx8IDAKK2RpZmYgLWFydU4gYS9jb25maWd1cmUgYi9jb25maWd1cmUKKy0tLSBhL2NvbmZpZ3VyZQkyMDE2LTA2LTAzIDE2OjQzOjUyLjY1MTM4NzUyOCAtMDcwMAorKysrIGIvY29uZmlndXJlCTIwMTYtMDYtMDMgMTY6NDQ6MTkuODc1MzE0MjgxIC0wNzAwCitAQCAtMTMwNSw3ICsxMzA1LDcgQEAKKyAKKyAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisgZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCistCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKysJCXN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKyAJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKyAJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCisgZG8KK2RpZmYgLWFydU4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDA5LTAzLTEwIDE2OjMxOjIxLjAwMDAwMDAwMCAtMDcwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxNi0wNi0wMyAxNjo0NDoxOS44NzkzMTQyNzAgLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgIyBVbmljb2RlIGNoYXJhY3RlciBtYXBwaW5ncy4KKyAjCisgCistbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcgk9ICR7ZGF0YWRpcn0vQ29yZVNlcnZpY2VzCisrbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcgk9ICR7ZGF0YWRpcn0vQ29yZUZvdW5kYXRpb24vQ2hhcmFjdGVyU2V0cworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFfREFUQQk9IENGQ2hhcmFjdGVyU2V0Qml0bWFwcy5iaXRtYXAJCVwKKyAJCQkJICBDRlVuaUNoYXJQcm9wZXJ0eURhdGFiYXNlLmRhdGEJXAorQEAgLTM1LDcgKzM1LDcgQEAKKyBDRl9DT01NT05fQ1BQRkxBR1MJCT0gJChBTV9DUFBGTEFHUykJCQlcCisgCQkJCSAgLURVX1NIT1dfRFJBRlRfQVBJPTEJCQlcCisgCQkJCSAgLURDRl9CVUlMRElOR19DRj0xCQkJXAorLQkJCQkgIC1EX19rQ0ZDaGFyYWN0ZXJTZXREaXI9XCIke2xpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFkaXJ9XCIgXAorKwkJCQkgIC1EX19rQ0ZEYXRhRGlyPVwiJHtkYXRhZGlyfVwiIFwKKyAJCQkJICAtRE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQ9TUFDX09TX1hfVkVSU0lPTl8xMF81CVwKKyAJCQkJICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQkJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL21hY2hfc3VwcG9ydAorZGlmZiAtYXJ1TiBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCTIwMDktMDMtMTAgMjM6NDQ6MzYuMDAwMDAwMDAwIC0wNzAwCisrKysgYi9NYWtlZmlsZS5pbgkyMDE2LTA2LTAzIDE2OjQ0OjE5Ljg3OTMxNDI3MCAtMDcwMAorQEAgLTUzNSw3ICs1MzUsNyBAQAorICMgRGVmaW5lIHdoZXJlIHdlIHdpbGwgaW5zdGFsbCBhbmQgd2hlcmUgQ29yZUZvdW5kYXRpb24gY2FuIGZpbmQgaXRzCisgIyBVbmljb2RlIGNoYXJhY3RlciBtYXBwaW5ncy4KKyAjCistbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpciA9ICR7ZGF0YWRpcn0vQ29yZVNlcnZpY2VzCisrbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpciA9ICR7ZGF0YWRpcn0vQ29yZUZvdW5kYXRpb24vQ2hhcmFjdGVyU2V0cworIGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFfREFUQSA9IENGQ2hhcmFjdGVyU2V0Qml0bWFwcy5iaXRtYXAJCVwKKyAJCQkJICBDRlVuaUNoYXJQcm9wZXJ0eURhdGFiYXNlLmRhdGEJXAorIAkJCQkgIENGVW5pY29kZURhdGEtQi5tYXBwaW5nCQlcCitAQCAtNTQ0LDcgKzU0NCw3IEBACisgQ0ZfQ09NTU9OX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykJCQlcCisgCQkJCSAgLURVX1NIT1dfRFJBRlRfQVBJPTEJCQlcCisgCQkJCSAgLURDRl9CVUlMRElOR19DRj0xCQkJXAorLQkJCQkgIC1EX19rQ0ZDaGFyYWN0ZXJTZXREaXI9XCIke2xpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFkaXJ9XCIgXAorKwkJCQkgIC1EX19rQ0ZEYXRhRGlyPVwiJHtkYXRhZGlyfVwiIFwKKyAJCQkJICAtRE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQ9TUFDX09TX1hfVkVSU0lPTl8xMF81CVwKKyAJCQkJICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQkJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL21hY2hfc3VwcG9ydApkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI0YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDEyLTA0LTI1IDIyOjU4OjM4Ljk2ODAwNTYzNyAtMDcwMAorQEAgLTU3NCwxOCArNTc2LDEwIEBACisgCisgc3RhdGljIENGU3BpbkxvY2tfdCBfX0NGVW5pQ2hhck1hcHBpbmdUYWJsZUxvY2sgPSBDRlNwaW5Mb2NrSW5pdDsKKyAKKy0jaWYgX19DRl9CSUdfRU5ESUFOX18KKyAjaWYgVVNFX01BQ0hPX1NFR01FTlQKKyAjZGVmaW5lIE1BUFBJTkdfVEFCTEVfRklMRSAiX19kYXRhIgorICNlbHNlCistI2RlZmluZSBNQVBQSU5HX1RBQkxFX0ZJTEUgIkNGVW5pY29kZURhdGEtQi5tYXBwaW5nIgorLSNlbmRpZgorLSNlbHNlCistI2lmIFVTRV9NQUNIT19TRUdNRU5UCistI2RlZmluZSBNQVBQSU5HX1RBQkxFX0ZJTEUgIl9fZGF0YSIKKy0jZWxzZQorLSNkZWZpbmUgTUFQUElOR19UQUJMRV9GSUxFICJDRlVuaWNvZGVEYXRhLUwubWFwcGluZyIKKy0jZW5kaWYKKysjZGVmaW5lIE1BUFBJTkdfVEFCTEVfRklMRSAiQ0ZVbmljb2RlRGF0YS5tYXBwaW5nIgorICNlbmRpZgorIAorIF9fcHJpdmF0ZV9leHRlcm5fXyBjb25zdCB2b2lkICpDRlVuaUNoYXJHZXRNYXBwaW5nRGF0YSh1aW50MzJfdCB0eXBlKSB7CitkaWZmIC1hcnVOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThmNzdhCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDEyLTA0LTI1IDIyOjU4OjM4Ljk2ODAwNTYzNyAtMDcwMAorQEAgLTIyMSwxMCArMjIxLDEyIEBACisgCisgICAgIGludCBub19oYW5nX2ZkID0gb3BlbigiL2Rldi9hdXRvZnNfbm93YWl0IiwgMCk7CisgICAgIGlmICgoZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JET05MWSwgMCkpIDwgMCkgeworKyAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkLW9ubHkgYWNjZXNzLiIpLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmaWxlTmFtZSk7CisgCWNsb3NlKG5vX2hhbmdfZmQpOworIAlyZXR1cm4gZmFsc2U7CisgICAgIH0KKyAgICAgaWYgKGZzdGF0KGZkLCAmc3RhdEJ1ZikgPCAwIHx8ICgqYnl0ZXMgPSBtbWFwKDAsIHN0YXRCdWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApKSA9PSAodm9pZCAqKS0xKSB7CisrICAgICAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBtYXAgJXMgZm9yIHJlYWQtb25seSBhY2Nlc3MuIiksIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGZpbGVOYW1lKTsKKyAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjMucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzc1YTRmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjMucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtYXJ1TiBhL0NGQnVuZGxlX1Jlc291cmNlcy5jIGIvQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKy0tLSBhL0NGQnVuZGxlX1Jlc291cmNlcy5jICAyMDE4LTAyLTIzIDExOjE4OjA3LjY4Nzc0Njc5MSAtMDgwMAorKysrIGIvQ0ZCdW5kbGVfUmVzb3VyY2VzLmMgIDIwMTgtMDItMjMgMTE6MTg6MTYuODEzMzA3NjI3IC0wODAwCitAQCAtNzkyLDcgKzc5Miw2IEBACisKKyAgICAgcmVzdWx0ID0gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHN0cmluZ1RhYmxlLCBrZXkpOworICAgICBpZiAoIXJlc3VsdCkgeworLSAgICAgICAgc3RhdGljIGludCBjYXBpdGFsaXplID0gLTE7CisgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgcmVzdWx0ID0gKENGU3RyaW5nUmVmKUNGUmV0YWluKGtleSk7CisgICAgICAgICB9IGVsc2UgaWYgKENGRXF1YWwodmFsdWUsIENGU1RSKCIiKSkpIHsKK0BAIC04MDAsMTUgKzc5OSw3IEBACisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIHJlc3VsdCA9IChDRlN0cmluZ1JlZilDRlJldGFpbih2YWx1ZSk7CisgICAgICAgICB9CistICAgICAgICBpZiAoY2FwaXRhbGl6ZSAhPSAwKSB7CistICAgICAgICAgICAgaWYgKGNhcGl0YWxpemUgIT0gMCkgeworLSAgICAgICAgICAgICAgICBDRk11dGFibGVTdHJpbmdSZWYgY2FwaXRhbGl6ZWRSZXN1bHQgPSBDRlN0cmluZ0NyZWF0ZU11dGFibGVDb3B5KENGR2V0QWxsb2NhdG9yKGJ1bmRsZSksIDAsIHJlc3VsdCk7CistICAgICAgICAgICAgICAgIENGTG9nKF9fa0NGTG9nQnVuZGxlLCBDRlNUUigiTG9jYWxpemFibGUgc3RyaW5nIFwiJUBcIiBub3QgZm91bmQgaW4gc3RyaW5ncyB0YWJsZSBcIiVAXCIgb2YgYnVuZGxlICVALiIpLCBrZXksIHRhYmxlTmFtZSwgYnVuZGxlKTsKKy0gICAgICAgICAgICAgICAgQ0ZTdHJpbmdVcHBlcmNhc2UoY2FwaXRhbGl6ZWRSZXN1bHQsIE5VTEwpOworLSAgICAgICAgICAgICAgICBDRlJlbGVhc2UocmVzdWx0KTsKKy0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FwaXRhbGl6ZWRSZXN1bHQ7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorKyAgICAgICAgQ0ZMb2coX19rQ0ZMb2dCdW5kbGUsIENGU1RSKCJMb2NhbGl6YWJsZSBzdHJpbmcgXCIlQFwiIG5vdCBmb3VuZCBpbiBzdHJpbmdzIHRhYmxlIFwiJUBcIiBvZiBidW5kbGUgJUAuIiksIGtleSwgdGFibGVOYW1lLCBidW5kbGUpOworICAgICB9IGVsc2UgeworICAgICAgICAgQ0ZSZXRhaW4ocmVzdWx0KTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjQucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzk3MzVhCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjQucGF0Y2gKQEAgLTAsMCArMSwzMTcgQEAKK0Zyb20gMWNlY2Q0ZDVhODNkOWQyMDY4MjBkZDU3NTdmNDE3N2ZjMTBkZWNmOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJHYWJyaWVsIE0uIEJlZGRpbmdmaWVsZCIgPGJlZGRpbmdmaWVsZEBnb29nbGUuY29tPgorRGF0ZTogRnJpLCAyMiBNYXIgMjAxOSAwODo0NDowNSAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvNF0gY29weSBBQ1hfUFRIUkVBRCB0byBtNC9hY2luY2x1ZGUubTQKKworLS0tCisgY29uZmlndXJlLmFjICAgIHwgICA0ICstCisgbTQvYWNpbmNsdWRlLm00IHwgMjgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjgyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMzYjdiOTkuLjc4OGEzOWMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQyOCw5ICs0MjgsOSBAQCBpZiB0ZXN0ICJ4JHt1dWlkX2Rpcn0iICE9ICJ4IiAtbyAieCR7dXVpZF9oZWFkZXJfZGlyfSIgIT0gIngiIC1vICJ4JHt1dWlkX2xpYnJhcgorIAkJCWZpCisgCisgCQkJaWYgdGVzdCAtZCAiJHt1dWlkX2Rpcn0vbGliIjsgdGhlbgorLQkJCQlVVUlEX0xERkxBR1M9Ii1MJHt1dWlkX2Rpcn0vbGliIgorKwkJCQlVVUlEX0xERkxBR1M9Ii1MJHt1dWlkX2Rpcn0vbGliIC1sdXVpZCIKKyAJCQllbHNlCistCQkJCVVVSURfTERGTEFHUz0iLUwke3V1aWRfZGlyfSIKKysJCQkJVVVJRF9MREZMQUdTPSItTCR7dXVpZF9kaXJ9IC1sdXVpZCIKKyAJCQlmaQorIAkJZWxzZQorIAkJCUFDX01TR19FUlJPUihbTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2Rpcn1dKQorZGlmZiAtLWdpdCBhL200L2FjaW5jbHVkZS5tNCBiL200L2FjaW5jbHVkZS5tNAoraW5kZXggZWE4NzE3ZS4uYTgxOTg4MyAxMDA2NDQKKy0tLSBhL200L2FjaW5jbHVkZS5tNAorKysrIGIvbTQvYWNpbmNsdWRlLm00CitAQCAtMzQsMyArMzQsMjgzIEBAIGlmIHRlc3QgIngke2FjX2N2X2Z1bmNfc3RybCQxfSIgPSAieG5vIjsgdGhlbgorIAlmaQorIGZpCisgXSkKKysKKysjCisrIyBTWU5PUFNJUworKyMKKysjICAgQUNYX1BUSFJFQUQoW0FDVElPTi1JRi1GT1VORFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKKysjCisrIyBERVNDUklQVElPTgorKyMKKysjICAgVGhpcyBtYWNybyBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgQyBwcm9ncmFtcyB1c2luZyBQT1NJWCB0aHJlYWRzLgorKyMgICBJdCBzZXRzIHRoZSBQVEhSRUFEX0xJQlMgb3V0cHV0IHZhcmlhYmxlIHRvIHRoZSB0aHJlYWRzIGxpYnJhcnkgYW5kCisrIyAgIGxpbmtlciBmbGFncywgYW5kIHRoZSBQVEhSRUFEX0NGTEFHUyBvdXRwdXQgdmFyaWFibGUgdG8gYW55IHNwZWNpYWwKKysjICAgQyBjb21waWxlciBmbGFncyB0aGF0IGFyZSBuZWVkZWQuIChUaGUgdXNlciBjYW4gYWxzbyBmb3JjZSBjZXJ0YWluCisrIyAgIGNvbXBpbGVyIGZsYWdzL2xpYnMgdG8gYmUgdGVzdGVkIGJ5IHNldHRpbmcgdGhlc2UgZW52aXJvbm1lbnQKKysjICAgdmFyaWFibGVzLikKKysjCisrIyAgIEFsc28gc2V0cyBQVEhSRUFEX0NDIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIgdGhhdCBpcyBuZWVkZWQgZm9yCisrIyAgIG11bHRpLXRocmVhZGVkIHByb2dyYW1zIChkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgQ0Mgb3RoZXJ3aXNlKS4KKysjICAgKFRoaXMgaXMgbmVjZXNzYXJ5IG9uIEFJWCB0byB1c2UgdGhlIHNwZWNpYWwgY2NfciBjb21waWxlciBhbGlhcy4pCisrIworKyMgICBOT1RFOiBZb3UgYXJlIGFzc3VtZWQgdG8gbm90IG9ubHkgY29tcGlsZSB5b3VyIHByb2dyYW0gd2l0aCB0aGVzZQorKyMgICBmbGFncywgYnV0IGFsc28gbGluayBpdCB3aXRoIHRoZW0gYXMgd2VsbC4gZS5nLiB5b3Ugc2hvdWxkIGxpbmsKKysjICAgd2l0aCAkUFRIUkVBRF9DQyAkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyAkTERGTEFHUyAuLi4gJFBUSFJFQURfTElCUworKyMgICAkTElCUworKyMKKysjICAgSWYgeW91IGFyZSBvbmx5IGJ1aWxkaW5nIHRocmVhZHMgcHJvZ3JhbXMsIHlvdSBtYXkgd2lzaCB0byB1c2UKKysjICAgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKKysjCisrIyAgICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorKyMgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKysjICAgICAgICAgIENDPSIkUFRIUkVBRF9DQyIKKysjCisrIyAgIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZQorKyMgICBjb25zdGFudCBoYXMgYSBub25zdGFuZGFyZCBuYW1lLCBkZWZpbmVzIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHRvCisrIyAgIHRoYXQgbmFtZSAoZS5nLiBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEIG9uIEFJWCkuCisrIworKyMgICBBQ1RJT04tSUYtRk9VTkQgaXMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRvIHJ1biBpZiBhIHRocmVhZHMKKysjICAgbGlicmFyeSBpcyBmb3VuZCwgYW5kIEFDVElPTi1JRi1OT1QtRk9VTkQgaXMgYSBsaXN0IG9mIGNvbW1hbmRzIHRvCisrIyAgIHJ1biBpdCBpZiBpdCBpcyBub3QgZm91bmQuIElmIEFDVElPTi1JRi1GT1VORCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUKKysjICAgZGVmYXVsdCBhY3Rpb24gd2lsbCBkZWZpbmUgSEFWRV9QVEhSRUFELgorKyMKKysjICAgUGxlYXNlIGxldCB0aGUgYXV0aG9ycyBrbm93IGlmIHRoaXMgbWFjcm8gZmFpbHMgb24gYW55IHBsYXRmb3JtLCBvcgorKyMgICBpZiB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnMgb3IgY29tbWVudHMuIFRoaXMgbWFjcm8gd2FzIGJhc2VkCisrIyAgIG9uIHdvcmsgYnkgU0dKIG9uIGF1dG9jb25mIHNjcmlwdHMgZm9yIEZGVFcgKGh0dHA6Ly93d3cuZmZ0dy5vcmcvKQorKyMgICAod2l0aCBoZWxwIGZyb20gTS4gRnJpZ28pLCBhcyB3ZWxsIGFzIGFjX3B0aHJlYWQgYW5kIGhiX3B0aHJlYWQKKysjICAgbWFjcm9zIHBvc3RlZCBieSBBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2byB0byB0aGUgYXV0b2NvbmYgbWFjcm8KKysjICAgcmVwb3NpdG9yeS4gV2UgYXJlIGFsc28gZ3JhdGVmdWwgZm9yIHRoZSBoZWxwZnVsIGZlZWRiYWNrIG9mCisrIyAgIG51bWVyb3VzIHVzZXJzLgorKyMKKysjIExBU1QgTU9ESUZJQ0FUSU9OCisrIworKyMgICAyMDA2LTA1LTI5CisrIworKyMgQ09QWUxFRlQKKysjCisrIyAgIENvcHlyaWdodCAoYykgMjAwNiBTdGV2ZW4gRy4gSm9obnNvbiA8c3RldmVuakBhbHVtLm1pdC5lZHU+CisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrIyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisrIyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyMgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKysjICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrIyAgIDAyMTExLTEzMDcsIFVTQS4KKysjCisrIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0CisrIyAgIG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUKKysjICAgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcKKysjICAgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2Ugd2hlbiB1c2luZyBvciBkaXN0cmlidXRpbmcgc3VjaCBzY3JpcHRzLCBldmVuIHRob3VnaAorKyMgICBwb3J0aW9ucyBvZiB0aGUgdGV4dCBvZiB0aGUgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbAorKyMgICBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybiBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0CisrIyAgIGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KKysjCisrIyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorKyMgICBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgTWFjcm8gQXJjaGl2ZS4gV2hlbiB5b3UKKysjICAgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UKKysjICAgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91cgorKyMgICBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwuCisrCisrQUNfREVGVU4oW0FDWF9QVEhSRUFEXSwgWworK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKytBQ19MQU5HX1NBVkUKKytBQ19MQU5HX0MKKythY3hfcHRocmVhZF9vaz1ubworKworKyMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKKysjIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1ZTY0IG9yIFNlcXVlbnQpLgorKyMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKysKKysjIEZpcnN0IG9mIGFsbCwgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgb2YgdGhlIFBUSFJFQURfTElCUywKKysjIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworKyMgdGhlbToKKytpZiB0ZXN0IHgiJFBUSFJFQURfTElCUyRQVEhSRUFEX0NGTEFHUyIgIT0geDsgdGhlbgorKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisrICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwdGhyZWFkX2pvaW4gaW4gTElCUz0kUFRIUkVBRF9MSUJTIHdpdGggQ0ZMQUdTPSRQVEhSRUFEX0NGTEFHU10pCisrICAgICAgICBBQ19UUllfTElOS19GVU5DKHB0aHJlYWRfam9pbiwgYWN4X3B0aHJlYWRfb2s9eWVzKQorKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkYWN4X3B0aHJlYWRfb2spCisrICAgICAgICBpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKysgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKysgICAgICAgIGZpCisrICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisrZmkKKysKKysjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisrIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCisrIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKKysjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisrCisrIyBDcmVhdGUgYSBsaXN0IG9mIHRocmVhZCBmbGFncyB0byB0cnkuICBJdGVtcyBzdGFydGluZyB3aXRoIGEgIi0iIGFyZQorKyMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorKyMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKKysjIHdoaWNoIGlzIGEgcHJvZ3JhbSByZXR1cm5pbmcgdGhlIGZsYWdzIGZvciB0aGUgUHRoIGVtdWxhdGlvbiBsaWJyYXJ5LgorKworK2FjeF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1LdGhyZWFkIC1rdGhyZWFkIGx0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhyZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgorKworKyMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKysjIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgorKworKyMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCisrIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCisrIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworKyMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQorKyMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRocmVhZCBzaW5jZSBTTVAtYWJsZSkKKysjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorKyMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKQorKyMgLXB0aHJlYWRzOiBTb2xhcmlzL2djYworKyMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKysjIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKKysjICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVzIGRlZmluZXMgcHRocmVhZHMgdG9vOworKyMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorKyMgICAgICAuLi4gLW10IGlzIGFsc28gdGhlIHB0aHJlYWRzIGZsYWcgZm9yIEhQL2FDQworKyMgcHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCisrIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisrIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCisrCisrY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKysgICAgICAgICpzb2xhcmlzKikKKysKKysgICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCisrICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCisrICAgICAgICAjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gIChXZSBuZWVkIHRvIGxpbmsgd2l0aCAtcHRocmVhZHMvLW10LworKyAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCisrICAgICAgICAjIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQKKysgICAgICAgICMgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28sCisrICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CisrCisrICAgICAgICBhY3hfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRhY3hfcHRocmVhZF9mbGFncyIKKysgICAgICAgIDs7CisrZXNhYworKworK2lmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCisrZm9yIGZsYWcgaW4gJGFjeF9wdGhyZWFkX2ZsYWdzOyBkbworKworKyAgICAgICAgY2FzZSAkZmxhZyBpbgorKyAgICAgICAgICAgICAgICBub25lKQorKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFnc10pCisrICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgICAgIC0qKQorKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRoICRmbGFnXSkKKysgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiRmbGFnIgorKyAgICAgICAgICAgICAgICA7OworKworKwkJcHRocmVhZC1jb25maWcpCisrCQlBQ19DSEVDS19QUk9HKGFjeF9wdGhyZWFkX2NvbmZpZywgcHRocmVhZC1jb25maWcsIHllcywgbm8pCisrCQlpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX2NvbmZpZyIgPSB4bm87IHRoZW4gY29udGludWU7IGZpCisrCQlQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKysJCVBUSFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0tbGlic2AiCisrCQk7OworKworKyAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnXSkKKysgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRmbGFnIgorKyAgICAgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKworKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKysgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisrCisrICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIGZ1bmN0aW9ucy4gIFdlIG11c3QgaW5jbHVkZSBwdGhyZWFkLmgsCisrICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCisrICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKKysgICAgICAgICMgV2UgY2hlY2sgZm9yIHB0aHJlYWRfam9pbiBiZWNhdXNlIGl0IGlzIGluIC1scHRocmVhZCBvbiBJUklYCisrICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKKysgICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCisrICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoIGJlY2F1c2UgaXQgaXMgb25lIG9mIHRoZSBmZXcgcHRocmVhZAorKyAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KKysgICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KKysgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCisrICAgICAgICAgICAgICAgICAgICBbcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOworKyAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKysgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsgXSwKKysgICAgICAgICAgICAgICAgICAgIFthY3hfcHRocmVhZF9vaz15ZXNdKQorKworKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKysgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorKworKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkYWN4X3B0aHJlYWRfb2spCisrICAgICAgICBpZiB0ZXN0ICJ4JGFjeF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBmaQorKworKyAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisrICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgorK2RvbmUKKytmaQorKworKyMgVmFyaW91cyBvdGhlciBjaGVja3M6CisraWYgdGVzdCAieCRhY3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisrICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKysgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKysKKysgICAgICAgICMgRGV0ZWN0IEFJWCBsb3NzYWdlOiBKT0lOQUJMRSBhdHRyaWJ1dGUgaXMgY2FsbGVkIFVOREVUQUNIRUQuCisrCUFDX01TR19DSEVDS0lORyhbZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlXSkKKysJYXR0cl9uYW1lPXVua25vd24KKysJZm9yIGF0dHIgaW4gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRDsgZG8KKysJICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sIFtpbnQgYXR0cj0kYXR0cjsgcmV0dXJuIGF0dHI7XSwKKysgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cl9uYW1lPSRhdHRyOyBicmVha10pCisrCWRvbmUKKysgICAgICAgIEFDX01TR19SRVNVTFQoJGF0dHJfbmFtZSkKKysgICAgICAgIGlmIHRlc3QgIiRhdHRyX25hbWUiICE9IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFOyB0aGVuCisrICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLCAkYXR0cl9uYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIG5lY2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhIG5vbi1zdGFuZGFyZCBuYW1lIG9uIHlvdXIgc3lzdGVtLl0pCisrICAgICAgICBmaQorKworKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBtb3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkc10pCisrICAgICAgICBmbGFnPW5vCisrICAgICAgICBjYXNlICIke2hvc3RfY3B1fS0ke2hvc3Rfb3N9IiBpbgorKyAgICAgICAgICAgICotYWl4KiB8ICotZnJlZWJzZCogfCAqLWRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CisrICAgICAgICAgICAgKnNvbGFyaXMqIHwgKi1vc2YqIHwgKi1ocHV4KikgZmxhZz0iLURfUkVFTlRSQU5UIjs7CisrICAgICAgICBlc2FjCisrICAgICAgICBBQ19NU0dfUkVTVUxUKCR7ZmxhZ30pCisrICAgICAgICBpZiB0ZXN0ICJ4JGZsYWciICE9IHhubzsgdGhlbgorKyAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyAkUFRIUkVBRF9DRkxBR1MiCisrICAgICAgICBmaQorKworKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKysgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorKworKyAgICAgICAgIyBNb3JlIEFJWCBsb3NzYWdlOiBtdXN0IGNvbXBpbGUgd2l0aCB4bGNfciBvciBjY19yCisrCWlmIHRlc3QgeCIkR0NDIiAhPSB4eWVzOyB0aGVuCisrICAgICAgICAgIEFDX0NIRUNLX1BST0dTKFBUSFJFQURfQ0MsIHhsY19yIGNjX3IsICR7Q0N9KQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBQVEhSRUFEX0NDPSRDQworKwlmaQorK2Vsc2UKKysgICAgICAgIFBUSFJFQURfQ0M9IiRDQyIKKytmaQorKworK0FDX1NVQlNUKFBUSFJFQURfTElCUykKKytBQ19TVUJTVChQVEhSRUFEX0NGTEFHUykKKytBQ19TVUJTVChQVEhSRUFEX0NDKQorKworKyMgRmluYWxseSwgZXhlY3V0ZSBBQ1RJT04tSUYtRk9VTkQvQUNUSU9OLUlGLU5PVC1GT1VORDoKKytpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKysgICAgICAgIGlmZWxzZShbJDFdLCxBQ19ERUZJTkUoSEFWRV9QVEhSRUFELDEsW0RlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLl0pLFskMV0pCisrICAgICAgICA6CisrZWxzZQorKyAgICAgICAgYWN4X3B0aHJlYWRfb2s9bm8KKysgICAgICAgICQyCisrZmkKKytBQ19MQU5HX1JFU1RPUkUKKytdKWRubCBBQ1hfUFRIUkVBRAorLS0gCisyLjIxLjAuMzkyLmdmOGY2Nzg3MTU5ZS1nb29nCisKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTY1LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2ZDNhNQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTY1LnBhdGNoCkBAIC0wLDAgKzEsODA5MjIgQEAKK0Zyb20gNWM0NzI0NmFlYjc2M2ZiM2UxMTc4YTNkOWU4YmVmYWM4ZWQyMDY0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJHYWJyaWVsIE0uIEJlZGRpbmdmaWVsZCIgPGJlZGRpbmdmaWVsZEBnb29nbGUuY29tPgorRGF0ZTogRnJpLCAyMiBNYXIgMjAxOSAwOTowMjo1MCAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvNF0gYXV0b3JlY29uZiAtaXZmIHdpdGggYXV0b2NvbmYgMi42OSBhbmQgYXV0b21ha2UgMS4xNC4xIG9uCisgdWJ1bnR1IDE0LjA0LjUKKworLS0tCisgTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyNzEgKy0KKyBhY2xvY2FsLm00ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTE1MSArLS0tLQorIGNvbXBhdC9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjg3ICstCisgY29uZmlnL2NvbXBpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNDUgKy0KKyBjb25maWcvY29uZmlnLmd1ZXNzICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU4MCArLQorIGNvbmZpZy9jb25maWcuc3ViICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzQxICstCisgY29uZmlnL2RlcGNvbXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ODYgKy0KKyBjb25maWcvaW5zdGFsbC1zaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzOCArLQorIGNvbmZpZy9sdG1haW4uc2ggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzOTU3ICsrLQorIGNvbmZpZy9taXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDYwICstCisgY29uZmlnL21raW5zdGFsbGRpcnMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDkgKy0KKyBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNTIwMSArKysrKystLS0tLS0tLS0tLS0tCisgZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluICAgICAgICAgICAgIHwgICAzMDcgKy0KKyBleGFtcGxlcy9DRkxvY2FsU2VydmVyL01ha2VmaWxlLmluICAgICAgICAgfCAgIDM0OCArLQorIGV4YW1wbGVzL0NGTWVzc2FnZVBvcnQvTWFrZWZpbGUuaW4gICAgICAgICB8ICAgMzE0ICstCisgZXhhbXBsZXMvQ0ZSdW5Mb29wVGltZXJFeGFtcGxlL01ha2VmaWxlLmluIHwgICAzMDcgKy0KKyBleGFtcGxlcy9DRlRlc3QvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgfCAgIDM3NCArLQorIGV4YW1wbGVzL0ROU1NlcnZpY2VNZXRhUXVlcnkvTWFrZWZpbGUuaW4gICB8ICAgMzA5ICstCisgZXhhbXBsZXMvRGlzcGxheVVSTC9NYWtlZmlsZS5pbiAgICAgICAgICAgIHwgICAzMDcgKy0KKyBleGFtcGxlcy9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQwMyArLQorIGV4YW1wbGVzL1JlYWRQTGlzdEV4YW1wbGUvTWFrZWZpbGUuaW4gICAgICB8ICAgMzA3ICstCisgZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyL01ha2VmaWxlLmluICAgICAgIHwgICAzMDkgKy0KKyBleGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlLmluICAgICAgICAgfCAgIDMwNyArLQorIGV4YW1wbGVzL1dyaXRlUExpc3RFeGFtcGxlL01ha2VmaWxlLmluICAgICB8ICAgMzA3ICstCisgaW5jbHVkZS9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMTcgKy0KKyBpbmNsdWRlL2NvbmZpZy5oLmluICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2MyArLQorIG00L2xpYnRvb2wubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3OTk3ICsrKysrCisgbTQvbHRvcHRpb25zLm00ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzODQgKworIG00L2x0c3VnYXIubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIzICsKKyBtNC9sdHZlcnNpb24ubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyMyArCisgbTQvbHR+b2Jzb2xldGUubTQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOTggKworIHRlc3RzL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzA3ICstCisgMzIgZmlsZXMgY2hhbmdlZCwgMjk3NTMgaW5zZXJ0aW9ucygrKSwgMzY1ODQgZGVsZXRpb25zKC0pCisgbW9kZSBjaGFuZ2UgMTAwNzU1ID0+IDEwMDY0NCBjb25maWcvbHRtYWluLnNoCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L2xpYnRvb2wubTQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvbHRvcHRpb25zLm00CisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L2x0c3VnYXIubTQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvbHR2ZXJzaW9uLm00CisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L2x0fm9ic29sZXRlLm00CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA4ZmMxYzQ2Li41NDgyMDljIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTIxLDkgKzIxLDU1IEBACisgCisgCisgVlBBVEggPSBAc3JjZGlyQAorK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKKythbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorKyAgICAgID8pIDs7IFwKKysgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKysgICAgICAgICBleGl0IDE7OyBcCisrICBlc2FjOyBcCisrICBoYXNfb3B0PW5vOyBcCisrICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKysgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKysgIGVsc2UgXAorKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKysgICAgICAqXFxbXCBcCV0qKSBcCisrICAgICAgICBicz1cXDsgXAorKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisrICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAorKyAgICBlc2FjOyBcCisrICBmaTsgXAorKyAgc2tpcF9uZXh0PW5vOyBcCisrICBzdHJpcF90cmFpbG9wdCAoKSBcCisrICB7IFwKKysgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKysgIH07IFwKKysgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKysgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisrICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKysgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICBlc2FjOyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisrICAgIGVzYWM7IFwKKysgIGRvbmU7IFwKKysgIHRlc3QgJCRoYXNfb3B0ID0geWVzCisrYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKythbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKyBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisrcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACisgYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CisgaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworQEAgLTUxLDE2ICs5NywyMyBAQCBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyAjCisgQENGX0JVSUxEX1BST0ZJTEVfVFJVRUBhbV9fYXBwZW5kXzIgPSBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlLmxhCisgc3ViZGlyID0gLgorLURJU1RfQ09NTU9OID0gUkVBRE1FICQoQ0ZfaW5jbHVkZV9IRUFERVJTKSAkKGFtX19jb25maWd1cmVfZGVwcykgXAorLQkkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvQ29yZUZvdW5kYXRpb24ucGMuaW4gXAorLQkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKy0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgSU5TVEFMTCBUT0RPIGNvbmZpZy9jb21waWxlIFwKKy0JY29uZmlnL2NvbmZpZy5ndWVzcyBjb25maWcvY29uZmlnLnN1YiBjb25maWcvZGVwY29tcCBcCistCWNvbmZpZy9pbnN0YWxsLXNoIGNvbmZpZy9sdG1haW4uc2ggY29uZmlnL21pc3NpbmcgXAorLQljb25maWcvbWtpbnN0YWxsZGlycworK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlndXJlICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHNyY2RpcikvQ29yZUZvdW5kYXRpb24ucGMuaW4gJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcCBcCisrCSQoQ0ZfaW5jbHVkZV9IRUFERVJTKSAkKG5vaW5zdF9IRUFERVJTKSBJTlNUQUxMIFJFQURNRSBUT0RPIFwKKysJY29uZmlnL2NvbXBpbGUgY29uZmlnL2NvbmZpZy5ndWVzcyBjb25maWcvY29uZmlnLnN1YiBcCisrCWNvbmZpZy9kZXBjb21wIGNvbmZpZy9pbnN0YWxsLXNoIGNvbmZpZy9taXNzaW5nIFwKKysJY29uZmlnL21raW5zdGFsbGRpcnMgY29uZmlnL2x0bWFpbi5zaCBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2NvbXBpbGUgJCh0b3Bfc3JjZGlyKS9jb25maWcvY29uZmlnLmd1ZXNzIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvY29uZmlnLnN1YiBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2luc3RhbGwtc2ggJCh0b3Bfc3JjZGlyKS9jb25maWcvbHRtYWluLnNoIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvbWlzc2luZworIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKKyBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hY2luY2x1ZGUubTQgXAorLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorKwkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAorKwkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisgYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKyAJJChBQ0xPQ0FMX000KQorIGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCitAQCAtNjgsMTYgKzEyMSwzNyBAQCBhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIG1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzCisgQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2NvbmZpZy5oCisgQ09ORklHX0NMRUFOX0ZJTEVTID0gQ29yZUZvdW5kYXRpb24ucGMKKytDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworIGFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgICopIGY9JCRwOzsgXAorICAgZXNhYzsKKy1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKKythbV9faW5zdGFsbF9tYXggPSA0MAorK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisrICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCisrYW1fX25vYmFzZV9zdHJpcCA9IFwKKysgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKysgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisrICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisrICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCisrYW1fX2Jhc2VfbGlzdCA9IFwKKysgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisrICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCisrYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKysgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKysgIH0KKyBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgXAorIAkiJChERVNURElSKSQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcikiIFwKKyAJIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiICIkKERFU1RESVIpJChDRl9pbmNsdWRlZGlyKSIKKy1saWJMVExJQlJBUklFU19JTlNUQUxMID0gJChJTlNUQUxMKQorIExUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCisgYW1fX0RFUEVOREVOQ0lFU18xID0gY29tcGF0L2xpYmNvbXBhdC5sYQorIGxpYkNvcmVGb3VuZGF0aW9uX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorQEAgLTE0Myw4ICsyMTcsMTIgQEAgYW1fX29iamVjdHNfMSA9IGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyBcCisgCWxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MVHJlZS5sbworIGFtX2xpYkNvcmVGb3VuZGF0aW9uX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpCisgbGliQ29yZUZvdW5kYXRpb25fbGFfT0JKRUNUUyA9ICQoYW1fbGliQ29yZUZvdW5kYXRpb25fbGFfT0JKRUNUUykKKy1saWJDb3JlRm91bmRhdGlvbl9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisrQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfbHRfMCA9IC0tc2lsZW50CisrYW1fX3ZfbHRfMSA9IAorK2xpYkNvcmVGb3VuZGF0aW9uX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorIAkkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKKyAJJChsaWJDb3JlRm91bmRhdGlvbl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisgQENGX0JVSUxEX0RFQlVHX1RSVUVAbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfREVQRU5ERU5DSUVTID0gIFwKK0BAIC0yMzYsNyArMzE0LDcgQEAgYW1fX29iamVjdHNfMiA9ICBcCisgQENGX0JVSUxEX0RFQlVHX1RSVUVACSQoYW1fX29iamVjdHNfMikKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9PQkpFQ1RTID0gIFwKKyAJJChhbV9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9PQkpFQ1RTKQorLWxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDIFwKKytsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKyAJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKyAJJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisgCSQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQEAgLTMzMSw2MSArNDA5LDE0MiBAQCBhbV9fb2JqZWN0c18zID0gIFwKKyBAQ0ZfQlVJTERfUFJPRklMRV9UUlVFQAkkKGFtX19vYmplY3RzXzMpCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9PQkpFQ1RTID0gIFwKKyAJJChhbV9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX09CSkVDVFMpCistbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyBcCisrbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKyAJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKyAJJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKKyAJJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKyBAQ0ZfQlVJTERfUFJPRklMRV9UUlVFQGFtX2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfcnBhdGggPSAtcnBhdGggXAorIEBDRl9CVUlMRF9QUk9GSUxFX1RSVUVACSQobGliZGlyKQorK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCisrYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfUF8wID0gZmFsc2UKKythbV9fdl9QXzEgPSA6CisrQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCisrYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworK2FtX192X0dFTl8xID0gCisrQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfYXRfMCA9IEAKKythbV9fdl9hdF8xID0gCisgREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZQorIGRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKKythbV9fbXYgPSBtdiAtZgorIENPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorIAkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCistTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKy0JLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKy0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisrCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCisrQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKKythbV9fdl9DQ18xID0gCisgQ0NMRCA9ICQoQ0MpCistTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKy0JJChMREZMQUdTKSAtbyAkQAorK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisrCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCisrYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOworK2FtX192X0NDTERfMSA9IAorIFNPVVJDRVMgPSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX1NPVVJDRVMpIFwKKyAJJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9TT1VSQ0VTKSBcCisgCSQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9TT1VSQ0VTKQorIERJU1RfU09VUkNFUyA9ICQobGliQ29yZUZvdW5kYXRpb25fbGFfU09VUkNFUykgXAorIAkkKGFtX19saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9TT1VSQ0VTX0RJU1QpIFwKKyAJJChhbV9fbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9TT1VSQ0VTX0RJU1QpCistUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKy0JaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCistCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKy0JaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKy0JaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKy0JaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCistCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCistbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YURBVEFfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQorLXBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQorK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAorKwljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCisrCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKKysJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKKysJaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAorKwlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKKysJaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKKysJdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworIERBVEEgPSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFfREFUQSkgJChwa2djb25maWdfREFUQSkKKy1DRl9pbmNsdWRlSEVBREVSU19JTlNUQUxMID0gJChJTlNUQUxMX0hFQURFUikKKyBIRUFERVJTID0gJChDRl9pbmNsdWRlX0hFQURFUlMpICQobm9pbnN0X0hFQURFUlMpCisgUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKythbV9fcmVjdXJzaXZlX3RhcmdldHMgPSBcCisrICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCisrICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCisrICAkKGFtX19leHRyYV9yZWN1cnNpdmVfdGFyZ2V0cykKKytBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKKysJY3Njb3BlIGRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKKythbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQorKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKysjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKysjICpub3QqIHByZXNlcnZlZC4KKythbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKysgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKysgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisrICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKysnCisrIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCisrYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKysgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKysgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCisgRVRBR1MgPSBldGFncworIENUQUdTID0gY3RhZ3MKKytDU0NPUEUgPSBjc2NvcGUKKyBESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCisgRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKyBkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCisgdG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCisgYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAorLSAgeyB0ZXN0ICEgLWQgJChkaXN0ZGlyKSBcCistICAgIHx8IHsgZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorLSAgICAgICAgICYmIHJtIC1mciAkKGRpc3RkaXIpOyB9OyB9CisrICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpIjsgdGhlbiBcCisrICAgIGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorKyAgICAgICYmIHJtIC1yZiAiJChkaXN0ZGlyKSIgXAorKyAgICAgIHx8IHsgc2xlZXAgNSAmJiBybSAtcmYgIiQoZGlzdGRpcikiOyB9OyBcCisrICBlbHNlIDo7IGZpCisrYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIgPSAkKGFtX19yZW1vdmVfZGlzdGRpcikKKythbV9fcmVsYXRpdml6ZSA9IFwKKysgIGRpcjA9YHB3ZGA7IFwKKysgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKysgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisrICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKysgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKysgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKysgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKysgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisrICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKysgICAgICBlbHNlIFwKKysgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKysgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisrICAgICAgICBlbHNlIFwKKysgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorKyAgICAgICAgZmk7IFwKKysgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisrICAgICAgZmk7IFwKKysgICAgZmk7IFwKKysgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisrICBkb25lOyBcCisrICByZWxkaXI9IiQkZGlyMiIKKyBESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKKyBHWklQX0VOViA9IC0tYmVzdAorK0RJU1RfVEFSR0VUUyA9IGRpc3QtZ3ppcAorIGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKKythbV9fZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9ICQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgXAorKyAgfCBzZWQgJ3N8XlwuL3wkKHByZWZpeCkvfCcgfCBncmVwIC12ICckKGluZm9kaXIpL2RpciQkJworIGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorIEFDTE9DQUwgPSBAQUNMT0NBTEAKKyBBTExPQ0EgPSBAQUxMT0NBQAorIEFNVEFSID0gQEFNVEFSQAorK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorIEFSID0gQEFSQAorIEFTID0gQEFTQAorIEFVVE9DT05GID0gQEFVVE9DT05GQAorQEAgLTQ0Miw2ICs2MDEsNyBAQCBMTl9TID0gQExOX1NACisgTFRMSUJPQkpTID0gQExUTElCT0JKU0AKKyBNQUlOVCA9IEBNQUlOVEAKKyBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACisgTUtESVJfUCA9IEBNS0RJUl9QQAorIE5NID0gQE5NQAorIE5NRURJVCA9IEBOTUVESVRACitAQCAtNDU0LDYgKzYxNCw3IEBAIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACisgUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKKytQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKKyBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorIFBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorIFBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK0BAIC00NzQsNiArNjM1LDcgQEAgYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKKyBhYnNfc3JjZGlyID0gQGFic19zcmNkaXJACisgYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACisgYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorQEAgLTUwOCw3ICs2NzAsNiBAQCBsaWJkaXIgPSBAbGliZGlyQAorIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyBsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKKy1sdF9FQ0hPID0gQGx0X0VDSE9ACisgbWFuZGlyID0gQG1hbmRpckAKKyBta2Rpcl9wID0gQG1rZGlyX3BACisgb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorQEAgLTUyMSw2ICs2ODIsNyBAQCBzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKyBzcmNkaXIgPSBAc3JjZGlyQAorIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKyB0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKKyB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyBTVUJESVJTID0gaW5jbHVkZSBjb21wYXQgLiB0ZXN0cyBleGFtcGxlcworQEAgLTg2MiwyMSArMTAyNCwyMSBAQCBhbGw6IGFsbC1yZWN1cnNpdmUKKyAKKyAuU1VGRklYRVM6CisgLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorLWFtLS1yZWZyZXNoOgorK2FtLS1yZWZyZXNoOiBNYWtlZmlsZQorIAlAOgorICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAnOyBcCistCSAgICAgIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIFwKKysJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24nOyBcCisrCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIFwKKyAJCSYmIGV4aXQgMDsgXAorIAkgICAgICBleGl0IDE7OyBcCisgCSAgZXNhYzsgXAorIAlkb25lOyBcCistCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgTWFrZWZpbGUKKysJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlJzsgXAorKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisrCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtODkyLDQ0ICsxMDU0LDU2IEBAICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DCisgCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKyAKKyAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKy0JY2QgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCisrCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKyAkKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKy0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCisrCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorIENvcmVGb3VuZGF0aW9uLnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvQ29yZUZvdW5kYXRpb24ucGMuaW4KKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorKworIGluc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorIAlAJChOT1JNQUxfSU5TVEFMTCkKKy0JdGVzdCAteiAiJChsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIgorLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisrCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisrCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisgCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorLQkgICAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKy0JICAgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChsaWJMVExJQlJBUklFU19JTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJyQkcCcgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKy0JICAgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAiJCRwIiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisrCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisgCSAgZWxzZSA6OyBmaTsgXAorLQlkb25lCisrCWRvbmU7IFwKKysJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisrCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiIHx8IGV4aXQgMTsgXAorKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCisrCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisrCX0KKyAKKyB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisgCUAkKE5PUk1BTF9VTklOU1RBTEwpCistCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKy0JICBwPSQoYW1fX3N0cmlwX2RpcikgXAorLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJHAnIjsgXAorLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkcCI7IFwKKysJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKysJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisrCSAgJChhbV9fc3RyaXBfZGlyKSBcCisrCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisrCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAorIAlkb25lCisgCisgY2xlYW4tbGliTFRMSUJSQVJJRVM6CisgCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCistCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorLQkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorLQkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKy0JICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCistCWRvbmUKKy1saWJDb3JlRm91bmRhdGlvbi5sYTogJChsaWJDb3JlRm91bmRhdGlvbl9sYV9PQkpFQ1RTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0RFUEVOREVOQ0lFUykgCistCSQobGliQ29yZUZvdW5kYXRpb25fbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX09CSkVDVFMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfTElCQUREKSAkKExJQlMpCistbGliQ29yZUZvdW5kYXRpb25fZGVidWcubGE6ICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfT0JKRUNUUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9ERVBFTkRFTkNJRVMpIAorLQkkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0xJTkspICQoYW1fbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfcnBhdGgpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfT0JKRUNUUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9MSUJBREQpICQoTElCUykKKy1saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlLmxhOiAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfT0JKRUNUUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0RFUEVOREVOQ0lFUykgCistCSQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9MSU5LKSAkKGFtX2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfcnBhdGgpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9PQkpFQ1RTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfTElCQUREKSAkKExJQlMpCisrCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBcCisrCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCisrCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKKysJICAgICAgc29ydCAtdWA7IFwKKysJdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKKysJICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCisrCSAgcm0gLWYgJCR7bG9jc307IFwKKysJfQorKworK2xpYkNvcmVGb3VuZGF0aW9uLmxhOiAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX09CSkVDVFMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYkNvcmVGb3VuZGF0aW9uX2xhX0RFUEVOREVOQ0lFUykgCisrCSQoQU1fVl9DQ0xEKSQobGliQ29yZUZvdW5kYXRpb25fbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX09CSkVDVFMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfTElCQUREKSAkKExJQlMpCisrCisrbGliQ29yZUZvdW5kYXRpb25fZGVidWcubGE6ICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfT0JKRUNUUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfREVQRU5ERU5DSUVTKSAKKysJJChBTV9WX0NDTEQpJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9MSU5LKSAkKGFtX2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX3JwYXRoKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX09CSkVDVFMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfTElCQUREKSAkKExJQlMpCisrCisrbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZS5sYTogJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX09CSkVDVFMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9ERVBFTkRFTkNJRVMpIAorKwkkKEFNX1ZfQ0NMRCkkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfTElOSykgJChhbV9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX3JwYXRoKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfT0JKRUNUUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0xJQkFERCkgJChMSUJTKQorIAorIG1vc3RseWNsZWFuLWNvbXBpbGU6CisgCS1ybSAtZiAqLiQoT0JKRVhUKQorQEAgLTExMjgsMTM0OCArMTMwMiwxMzQ4IEBAIGRpc3RjbGVhbi1jb21waWxlOgorIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5QbG9AYW1fX3F1b3RlQAorIAorIC5jLm86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyAuYy5vYmo6CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorIAorIC5jLmxvOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvOiBDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LmxvOiBDRkFycmF5LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkubG8gYHRlc3QgLWYgJ0NGQXJyYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcnJheS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQXJyYXkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LmxvIGB0ZXN0IC1mICdDRkFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXJyYXkuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkFycmF5LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkFycmF5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZBcnJheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkubG8gYHRlc3QgLWYgJ0NGQXJyYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcnJheS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQXJyYXkubG8gYHRlc3QgLWYgJ0NGQXJyYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcnJheS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYWcubG86IENGQmFnLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFnLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhZy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYWcubG8gYHRlc3QgLWYgJ0NGQmFnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFnLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYWcuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhZy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJhZy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFnLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYWcuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFnLmxvIGB0ZXN0IC1mICdDRkJhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhZy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYWcuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhZy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCYWcuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFnLmxvIGB0ZXN0IC1mICdDRkJhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhZy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFnLmxvIGB0ZXN0IC1mICdDRkJhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhZy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYXNlLmxvOiBDRkJhc2UuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYXNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhc2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFzZS5sbyBgdGVzdCAtZiAnQ0ZCYXNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFzZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFzZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFzZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJhc2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFzZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYXNlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJhc2UubG8gYHRlc3QgLWYgJ0NGQmFzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhc2UuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFzZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmFzZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCYXNlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYXNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYXNlLmxvIGB0ZXN0IC1mICdDRkJhc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYXNlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCYXNlLmxvIGB0ZXN0IC1mICdDRkJhc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYXNlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeUhlYXAubG86IENGQmluYXJ5SGVhcC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeUhlYXAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5SGVhcC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlIZWFwLmxvIGB0ZXN0IC1mICdDRkJpbmFyeUhlYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlIZWFwLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlIZWFwLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlIZWFwLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQmluYXJ5SGVhcC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5SGVhcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlIZWFwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeUhlYXAuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5SGVhcC5sbyBgdGVzdCAtZiAnQ0ZCaW5hcnlIZWFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmluYXJ5SGVhcC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlIZWFwLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlIZWFwLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkJpbmFyeUhlYXAuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeUhlYXAubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeUhlYXAubG8gYHRlc3QgLWYgJ0NGQmluYXJ5SGVhcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeUhlYXAuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeUhlYXAubG8gYHRlc3QgLWYgJ0NGQmluYXJ5SGVhcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeUhlYXAuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QubG86IENGQmluYXJ5UExpc3QuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5sbyBgdGVzdCAtZiAnQ0ZCaW5hcnlQTGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeVBMaXN0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZCaW5hcnlQTGlzdC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QubG8gYHRlc3QgLWYgJ0NGQmluYXJ5UExpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlQTGlzdC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQmluYXJ5UExpc3QuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQmluYXJ5UExpc3QuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpbmFyeVBMaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5sbyBgdGVzdCAtZiAnQ0ZCaW5hcnlQTGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeVBMaXN0LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaW5hcnlQTGlzdC5sbyBgdGVzdCAtZiAnQ0ZCaW5hcnlQTGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeVBMaXN0LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpdFZlY3Rvci5sbzogQ0ZCaXRWZWN0b3IuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaXRWZWN0b3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQml0VmVjdG9yLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpdFZlY3Rvci5sbyBgdGVzdCAtZiAnQ0ZCaXRWZWN0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaXRWZWN0b3IuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpdFZlY3Rvci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQml0VmVjdG9yLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQml0VmVjdG9yLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaXRWZWN0b3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQml0VmVjdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpdFZlY3Rvci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJpdFZlY3Rvci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQml0VmVjdG9yLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkJpdFZlY3Rvci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQml0VmVjdG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvOiBDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8gYHRlc3QgLWYgJ0NGQnVpbHRpbkNvbnZlcnRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdWlsdGluQ29udmVydGVycy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQnVpbHRpbkNvbnZlcnRlcnMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIGB0ZXN0IC1mICdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVpbHRpbkNvbnZlcnRlcnMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8gYHRlc3QgLWYgJ0NGQnVpbHRpbkNvbnZlcnRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdWlsdGluQ29udmVydGVycy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8gYHRlc3QgLWYgJ0NGQnVpbHRpbkNvbnZlcnRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdWlsdGluQ29udmVydGVycy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGUubG86IENGQnVuZGxlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGUubG8gYHRlc3QgLWYgJ0NGQnVuZGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJ1bmRsZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCdW5kbGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvOiBDRkJ1bmRsZV9SZXNvdXJjZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbyBgdGVzdCAtZiAnQ0ZCdW5kbGVfUmVzb3VyY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlX1Jlc291cmNlcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMubG8gYHRlc3QgLWYgJ0NGQnVuZGxlX1Jlc291cmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZV9SZXNvdXJjZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCdW5kbGVfUmVzb3VyY2VzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLmxvOiBDRkNhbGVuZGFyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIubG8gYHRlc3QgLWYgJ0NGQ2FsZW5kYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDYWxlbmRhci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQ2FsZW5kYXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLmxvIGB0ZXN0IC1mICdDRkNhbGVuZGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2FsZW5kYXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNhbGVuZGFyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkNhbGVuZGFyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDYWxlbmRhci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIubG8gYHRlc3QgLWYgJ0NGQ2FsZW5kYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDYWxlbmRhci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2FsZW5kYXIubG8gYHRlc3QgLWYgJ0NGQ2FsZW5kYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDYWxlbmRhci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDaGFyYWN0ZXJTZXQubG86IENGQ2hhcmFjdGVyU2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNoYXJhY3RlclNldC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDaGFyYWN0ZXJTZXQubG8gYHRlc3QgLWYgJ0NGQ2hhcmFjdGVyU2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2hhcmFjdGVyU2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDaGFyYWN0ZXJTZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNoYXJhY3RlclNldC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkNoYXJhY3RlclNldC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2hhcmFjdGVyU2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNoYXJhY3RlclNldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDaGFyYWN0ZXJTZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIGB0ZXN0IC1mICdDRkNoYXJhY3RlclNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNoYXJhY3RlclNldC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDaGFyYWN0ZXJTZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNoYXJhY3RlclNldC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZDaGFyYWN0ZXJTZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNoYXJhY3RlclNldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIGB0ZXN0IC1mICdDRkNoYXJhY3RlclNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNoYXJhY3RlclNldC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIGB0ZXN0IC1mICdDRkNoYXJhY3RlclNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNoYXJhY3RlclNldC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDb25jcmV0ZVN0cmVhbXMubG86IENGQ29uY3JldGVTdHJlYW1zLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNvbmNyZXRlU3RyZWFtcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDb25jcmV0ZVN0cmVhbXMubG8gYHRlc3QgLWYgJ0NGQ29uY3JldGVTdHJlYW1zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ29uY3JldGVTdHJlYW1zLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNvbmNyZXRlU3RyZWFtcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkNvbmNyZXRlU3RyZWFtcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkNvbmNyZXRlU3RyZWFtcy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZDb25jcmV0ZVN0cmVhbXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRhLmxvOiBDRkRhdGEuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRhLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGEuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0YS5sbyBgdGVzdCAtZiAnQ0ZEYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0YS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0YS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0YS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkRhdGEuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0YS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRhLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGEubG8gYHRlc3QgLWYgJ0NGRGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGEuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0YS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0YS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZEYXRhLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRhLmxvIGB0ZXN0IC1mICdDRkRhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRhLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRhLmxvIGB0ZXN0IC1mICdDRkRhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRhLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGVGb3JtYXR0ZXIubG86IENGRGF0ZUZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGVGb3JtYXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZUZvcm1hdHRlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRkRhdGVGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlRm9ybWF0dGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlRm9ybWF0dGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlRm9ybWF0dGVyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGRGF0ZUZvcm1hdHRlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZUZvcm1hdHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGVGb3JtYXR0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZEYXRlRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZUZvcm1hdHRlci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlRm9ybWF0dGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlRm9ybWF0dGVyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkRhdGVGb3JtYXR0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGVGb3JtYXR0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGVGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGRGF0ZUZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGVGb3JtYXR0ZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGVGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGRGF0ZUZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGVGb3JtYXR0ZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZS5sbzogQ0ZEYXRlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGUubG8gYHRlc3QgLWYgJ0NGRGF0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEYXRlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEYXRlLmxvIGB0ZXN0IC1mICdDRkRhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRhdGUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGRGF0ZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZS5sbyBgdGVzdCAtZiAnQ0ZEYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGF0ZS5sbyBgdGVzdCAtZiAnQ0ZEYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEaWN0aW9uYXJ5LmxvOiBDRkRpY3Rpb25hcnkuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEaWN0aW9uYXJ5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkRpY3Rpb25hcnkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGljdGlvbmFyeS5sbyBgdGVzdCAtZiAnQ0ZEaWN0aW9uYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGljdGlvbmFyeS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGljdGlvbmFyeS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGljdGlvbmFyeS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkRpY3Rpb25hcnkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRpY3Rpb25hcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGljdGlvbmFyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEaWN0aW9uYXJ5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkRpY3Rpb25hcnkubG8gYHRlc3QgLWYgJ0NGRGljdGlvbmFyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRpY3Rpb25hcnkuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGljdGlvbmFyeS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRGljdGlvbmFyeS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZEaWN0aW9uYXJ5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEaWN0aW9uYXJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEaWN0aW9uYXJ5LmxvIGB0ZXN0IC1mICdDRkRpY3Rpb25hcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEaWN0aW9uYXJ5LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZEaWN0aW9uYXJ5LmxvIGB0ZXN0IC1mICdDRkRpY3Rpb25hcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEaWN0aW9uYXJ5LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLmxvOiBDRkVycm9yLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IubG8gYHRlc3QgLWYgJ0NGRXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZFcnJvci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGRXJyb3IuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLmxvIGB0ZXN0IC1mICdDRkVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRXJyb3IuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkVycm9yLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkVycm9yLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZFcnJvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IubG8gYHRlc3QgLWYgJ0NGRXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZFcnJvci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRXJyb3IubG8gYHRlc3QgLWYgJ0NGRXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZFcnJvci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvOiBDRkZpbGVVdGlsaXRpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkZpbGVVdGlsaXRpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRmlsZVV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZGaWxlVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRmlsZVV0aWxpdGllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRmlsZVV0aWxpdGllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRmlsZVV0aWxpdGllcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkZpbGVVdGlsaXRpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkZpbGVVdGlsaXRpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRmlsZVV0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZGaWxlVXRpbGl0aWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkZpbGVVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGRmlsZVV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkZpbGVVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRmlsZVV0aWxpdGllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGRmlsZVV0aWxpdGllcy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZGaWxlVXRpbGl0aWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRkZpbGVVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZGaWxlVXRpbGl0aWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRkZpbGVVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZGaWxlVXRpbGl0aWVzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZUlkZW50aWZpZXIubG86IENGTG9jYWxlSWRlbnRpZmllci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlSWRlbnRpZmllci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIGB0ZXN0IC1mICdDRkxvY2FsZUlkZW50aWZpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGTG9jYWxlSWRlbnRpZmllci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZUlkZW50aWZpZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGVJZGVudGlmaWVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTG9jYWxlSWRlbnRpZmllci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkxvY2FsZUlkZW50aWZpZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8gYHRlc3QgLWYgJ0NGTG9jYWxlSWRlbnRpZmllci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZUlkZW50aWZpZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8gYHRlc3QgLWYgJ0NGTG9jYWxlSWRlbnRpZmllci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZUlkZW50aWZpZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlLmxvOiBDRkxvY2FsZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlLmxvIGB0ZXN0IC1mICdDRkxvY2FsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZMb2NhbGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZS5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTG9jYWxlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTG9jYWxlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZMb2NhbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZS5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRkxvY2FsZS5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQubG86IENGTWFjaFBvcnQuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNYWNoUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1hY2hQb3J0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZNYWNoUG9ydC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQubG8gYHRlc3QgLWYgJ0NGTWFjaFBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNYWNoUG9ydC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWFjaFBvcnQuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTWFjaFBvcnQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk1hY2hQb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNYWNoUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1hY2hQb3J0LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNYWNoUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNYWNoUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1hY2hQb3J0LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LmxvOiBDRk1lc3NhZ2VQb3J0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQubG8gYHRlc3QgLWYgJ0NGTWVzc2FnZVBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNZXNzYWdlUG9ydC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGTWVzc2FnZVBvcnQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LmxvIGB0ZXN0IC1mICdDRk1lc3NhZ2VQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWVzc2FnZVBvcnQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk1lc3NhZ2VQb3J0LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRk1lc3NhZ2VQb3J0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZNZXNzYWdlUG9ydC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQubG8gYHRlc3QgLWYgJ0NGTWVzc2FnZVBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNZXNzYWdlUG9ydC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTWVzc2FnZVBvcnQubG8gYHRlc3QgLWYgJ0NGTWVzc2FnZVBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNZXNzYWdlUG9ydC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG86IENGTnVtYmVyRm9ybWF0dGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlckZvcm1hdHRlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGTnVtYmVyRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTnVtYmVyRm9ybWF0dGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlckZvcm1hdHRlci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRk51bWJlckZvcm1hdHRlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlckZvcm1hdHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRk51bWJlckZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlckZvcm1hdHRlci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlckZvcm1hdHRlci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZOdW1iZXJGb3JtYXR0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlckZvcm1hdHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRk51bWJlckZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlckZvcm1hdHRlci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRk51bWJlckZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlckZvcm1hdHRlci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXIubG86IENGTnVtYmVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXIubG8gYHRlc3QgLWYgJ0NGTnVtYmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTnVtYmVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRk51bWJlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZOdW1iZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZOdW1iZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRk51bWJlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5sbzogQ0ZQbGF0Zm9ybS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLmxvIGB0ZXN0IC1mICdDRlBsYXRmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGxhdGZvcm0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlBsYXRmb3JtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5sbyBgdGVzdCAtZiAnQ0ZQbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsYXRmb3JtLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbGF0Zm9ybS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZQbGF0Zm9ybS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGxhdGZvcm0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLmxvIGB0ZXN0IC1mICdDRlBsYXRmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGxhdGZvcm0uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsYXRmb3JtLmxvIGB0ZXN0IC1mICdDRlBsYXRmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGxhdGZvcm0uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG86IENGUGx1Z0luX0ZhY3RvcnkuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fRmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9GYWN0b3J5LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZQbHVnSW5fRmFjdG9yeS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0ZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fRmFjdG9yeS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0ZhY3RvcnkuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUGx1Z0luX0ZhY3RvcnkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9GYWN0b3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fRmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9GYWN0b3J5LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fRmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9GYWN0b3J5LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9JbnN0YW5jZS5sbzogQ0ZQbHVnSW5fSW5zdGFuY2UuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0luc3RhbmNlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9JbnN0YW5jZS5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fSW5zdGFuY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fSW5zdGFuY2UuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9JbnN0YW5jZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0luc3RhbmNlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUGx1Z0luX0luc3RhbmNlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9JbnN0YW5jZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9JbnN0YW5jZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0luc3RhbmNlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlBsdWdJbl9JbnN0YW5jZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbi5sbzogQ0ZQbHVnSW4uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW4uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUGx1Z0luLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlBsdWdJbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9QbHVnSW4ubG86IENGUGx1Z0luX1BsdWdJbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9QbHVnSW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX1BsdWdJbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9QbHVnSW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fUGx1Z0luLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fUGx1Z0luLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fUGx1Z0luLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUGx1Z0luX1BsdWdJbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX1BsdWdJbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9QbHVnSW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX1BsdWdJbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fUGx1Z0luLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQbHVnSW5fUGx1Z0luLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlBsdWdJbl9QbHVnSW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9QbHVnSW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9QbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX1BsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9QbHVnSW4uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlBsdWdJbl9QbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX1BsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9QbHVnSW4uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMubG86IENGUHJlZmVyZW5jZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZQcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByZWZlcmVuY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZQcmVmZXJlbmNlcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcmVmZXJlbmNlcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJlZmVyZW5jZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUHJlZmVyZW5jZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlByZWZlcmVuY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZQcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByZWZlcmVuY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZQcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByZWZlcmVuY2VzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlByb3BlcnR5TGlzdC5sbzogQ0ZQcm9wZXJ0eUxpc3QuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcm9wZXJ0eUxpc3QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJvcGVydHlMaXN0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlByb3BlcnR5TGlzdC5sbyBgdGVzdCAtZiAnQ0ZQcm9wZXJ0eUxpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcm9wZXJ0eUxpc3QuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlByb3BlcnR5TGlzdC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJvcGVydHlMaXN0LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUHJvcGVydHlMaXN0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcm9wZXJ0eUxpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJvcGVydHlMaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlByb3BlcnR5TGlzdC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcm9wZXJ0eUxpc3QubG8gYHRlc3QgLWYgJ0NGUHJvcGVydHlMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUHJvcGVydHlMaXN0LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlByb3BlcnR5TGlzdC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJvcGVydHlMaXN0LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlByb3BlcnR5TGlzdC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUHJvcGVydHlMaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcm9wZXJ0eUxpc3QubG8gYHRlc3QgLWYgJ0NGUHJvcGVydHlMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUHJvcGVydHlMaXN0LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZQcm9wZXJ0eUxpc3QubG8gYHRlc3QgLWYgJ0NGUHJvcGVydHlMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUHJvcGVydHlMaXN0LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bkxvb3AubG86IENGUnVuTG9vcC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bkxvb3AubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVuTG9vcC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW5Mb29wLmxvIGB0ZXN0IC1mICdDRlJ1bkxvb3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW5Mb29wLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW5Mb29wLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW5Mb29wLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUnVuTG9vcC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVuTG9vcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW5Mb29wLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bkxvb3AuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVuTG9vcC5sbyBgdGVzdCAtZiAnQ0ZSdW5Mb29wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVuTG9vcC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW5Mb29wLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW5Mb29wLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlJ1bkxvb3AuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bkxvb3AubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bkxvb3AubG8gYHRlc3QgLWYgJ0NGUnVuTG9vcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlJ1bkxvb3AuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bkxvb3AubG8gYHRlc3QgLWYgJ0NGUnVuTG9vcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlJ1bkxvb3AuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVudGltZS5sbzogQ0ZSdW50aW1lLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVudGltZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW50aW1lLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bnRpbWUubG8gYHRlc3QgLWYgJ0NGUnVudGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlJ1bnRpbWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bnRpbWUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bnRpbWUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZSdW50aW1lLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW50aW1lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bnRpbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVudGltZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZSdW50aW1lLmxvIGB0ZXN0IC1mICdDRlJ1bnRpbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW50aW1lLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bnRpbWUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlJ1bnRpbWUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUnVudGltZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVudGltZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVudGltZS5sbyBgdGVzdCAtZiAnQ0ZSdW50aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVudGltZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGUnVudGltZS5sbyBgdGVzdCAtZiAnQ0ZSdW50aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVudGltZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTZXQubG86IENGU2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU2V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNldC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTZXQubG8gYHRlc3QgLWYgJ0NGU2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNldC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlNldC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU2V0LmxvIGB0ZXN0IC1mICdDRlNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNldC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNldC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU2V0LmxvIGB0ZXN0IC1mICdDRlNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNldC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU2V0LmxvIGB0ZXN0IC1mICdDRlNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNldC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXQubG86IENGU29ja2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXQubG8gYHRlc3QgLWYgJ0NGU29ja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ja2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlNvY2tldC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0LmxvIGB0ZXN0IC1mICdDRlNvY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTb2NrZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0LmxvIGB0ZXN0IC1mICdDRlNvY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0LmxvIGB0ZXN0IC1mICdDRlNvY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXRTdHJlYW0ubG86IENGU29ja2V0U3RyZWFtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0U3RyZWFtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldFN0cmVhbS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGU29ja2V0U3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ja2V0U3RyZWFtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXRTdHJlYW0uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldFN0cmVhbS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlNvY2tldFN0cmVhbS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0U3RyZWFtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldFN0cmVhbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXRTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb2NrZXRTdHJlYW0uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldFN0cmVhbS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTb2NrZXRTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvY2tldFN0cmVhbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvOiBDRlNvcnRGdW5jdGlvbnMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvcnRGdW5jdGlvbnMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyBgdGVzdCAtZiAnQ0ZTb3J0RnVuY3Rpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ydEZ1bmN0aW9ucy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ydEZ1bmN0aW9ucy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ydEZ1bmN0aW9ucy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlNvcnRGdW5jdGlvbnMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvcnRGdW5jdGlvbnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb3J0RnVuY3Rpb25zLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlNvcnRGdW5jdGlvbnMubG8gYHRlc3QgLWYgJ0NGU29ydEZ1bmN0aW9ucy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvcnRGdW5jdGlvbnMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ydEZ1bmN0aW9ucy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU29ydEZ1bmN0aW9ucy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTb3J0RnVuY3Rpb25zLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvIGB0ZXN0IC1mICdDRlNvcnRGdW5jdGlvbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb3J0RnVuY3Rpb25zLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvIGB0ZXN0IC1mICdDRlNvcnRGdW5jdGlvbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb3J0RnVuY3Rpb25zLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0b3JhZ2UubG86IENGU3RvcmFnZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0b3JhZ2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RvcmFnZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdG9yYWdlLmxvIGB0ZXN0IC1mICdDRlN0b3JhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdG9yYWdlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdG9yYWdlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdG9yYWdlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RvcmFnZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RvcmFnZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdG9yYWdlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0b3JhZ2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RvcmFnZS5sbyBgdGVzdCAtZiAnQ0ZTdG9yYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RvcmFnZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdG9yYWdlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdG9yYWdlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0b3JhZ2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0b3JhZ2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0b3JhZ2UubG8gYHRlc3QgLWYgJ0NGU3RvcmFnZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0b3JhZ2UuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0b3JhZ2UubG8gYHRlc3QgLWYgJ0NGU3RvcmFnZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0b3JhZ2UuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyZWFtLmxvOiBDRlN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmVhbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyZWFtLmxvIGB0ZXN0IC1mICdDRlN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyZWFtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJlYW0uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmVhbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyZWFtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyZWFtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJlYW0uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU3RyZWFtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG86IENGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbzogQ0ZTdHJpbmdFbmNvZGluZ3MuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ3MuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ0VuY29kaW5ncy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdzLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nRW5jb2RpbmdzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ0VuY29kaW5ncy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ0VuY29kaW5ncy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmluZ0VuY29kaW5ncy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZy5sbzogQ0ZTdHJpbmcuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmcuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmluZy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1NjYW5uZXIubG86IENGU3RyaW5nU2Nhbm5lci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1NjYW5uZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nU2Nhbm5lci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1NjYW5uZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdTY2FubmVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdTY2FubmVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdTY2FubmVyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nU2Nhbm5lci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nU2Nhbm5lci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1NjYW5uZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nU2Nhbm5lci5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdTY2FubmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nU2Nhbm5lci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdTY2FubmVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdTY2FubmVyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmluZ1NjYW5uZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1NjYW5uZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1NjYW5uZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nU2Nhbm5lci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1NjYW5uZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1NjYW5uZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nU2Nhbm5lci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1NjYW5uZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvOiBDRlN0cmluZ1V0aWxpdGllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdVdGlsaXRpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1V0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1V0aWxpdGllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdVdGlsaXRpZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTdHJpbmdVdGlsaXRpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdVdGlsaXRpZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU3RyaW5nVXRpbGl0aWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdVdGlsaXRpZXMuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG86IENGU3lzdGVtRGlyZWN0b3JpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyBgdGVzdCAtZiAnQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN5c3RlbURpcmVjdG9yaWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gYHRlc3QgLWYgJ0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyBgdGVzdCAtZiAnQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN5c3RlbURpcmVjdG9yaWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyBgdGVzdCAtZiAnQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN5c3RlbURpcmVjdG9yaWVzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLmxvOiBDRlRpbWVab25lLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUubG8gYHRlc3QgLWYgJ0NGVGltZVpvbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUaW1lWm9uZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVGltZVpvbmUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLmxvIGB0ZXN0IC1mICdDRlRpbWVab25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVGltZVpvbmUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlRpbWVab25lLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlRpbWVab25lLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUaW1lWm9uZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUubG8gYHRlc3QgLWYgJ0NGVGltZVpvbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUaW1lWm9uZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVGltZVpvbmUubG8gYHRlc3QgLWYgJ0NGVGltZVpvbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUaW1lWm9uZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUcmVlLmxvOiBDRlRyZWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUcmVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlRyZWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVHJlZS5sbyBgdGVzdCAtZiAnQ0ZUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVHJlZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVHJlZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVHJlZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlRyZWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlRyZWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVHJlZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUcmVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlRyZWUubG8gYHRlc3QgLWYgJ0NGVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRyZWUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVHJlZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVHJlZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZUcmVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUcmVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUcmVlLmxvIGB0ZXN0IC1mICdDRlRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUcmVlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZUcmVlLmxvIGB0ZXN0IC1mICdDRlRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUcmVlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTC5sbzogQ0ZVUkwuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTC5sbyBgdGVzdCAtZiAnQ0ZVUkwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVUkwuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVVJMLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVSTC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTEFjY2Vzcy5sbzogQ0ZVUkxBY2Nlc3MuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkxBY2Nlc3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMQWNjZXNzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTEFjY2Vzcy5sbyBgdGVzdCAtZiAnQ0ZVUkxBY2Nlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVUkxBY2Nlc3MuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTEFjY2Vzcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMQWNjZXNzLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVVJMQWNjZXNzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkxBY2Nlc3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMQWNjZXNzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTEFjY2Vzcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkxBY2Nlc3MubG8gYHRlc3QgLWYgJ0NGVVJMQWNjZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMQWNjZXNzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVSTEFjY2Vzcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMQWNjZXNzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVSTEFjY2Vzcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVJMQWNjZXNzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkxBY2Nlc3MubG8gYHRlc3QgLWYgJ0NGVVJMQWNjZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMQWNjZXNzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVUkxBY2Nlc3MubG8gYHRlc3QgLWYgJ0NGVVJMQWNjZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMQWNjZXNzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVVSUQubG86IENGVVVJRC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVVSUQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVVJRC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVVUlELmxvIGB0ZXN0IC1mICdDRlVVSUQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVVUlELmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVVUlELlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVVUlELlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVVVJRC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVVJRC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVVUlELmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVVSUQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVVVJRC5sbyBgdGVzdCAtZiAnQ0ZVVUlELmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVVJRC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVVUlELlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVVUlELlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVVSUQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVVSUQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVVSUQubG8gYHRlc3QgLWYgJ0NGVVVJRC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVVSUQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVVSUQubG8gYHRlc3QgLWYgJ0NGVVVJRC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVVSUQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pQ2hhci5sbzogQ0ZVbmlDaGFyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pQ2hhci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmlDaGFyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaUNoYXIubG8gYHRlc3QgLWYgJ0NGVW5pQ2hhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaUNoYXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaUNoYXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaUNoYXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVbmlDaGFyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmlDaGFyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaUNoYXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pQ2hhci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmlDaGFyLmxvIGB0ZXN0IC1mICdDRlVuaUNoYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmlDaGFyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaUNoYXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaUNoYXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVW5pQ2hhci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pQ2hhci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pQ2hhci5sbyBgdGVzdCAtZiAnQ0ZVbmlDaGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pQ2hhci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pQ2hhci5sbyBgdGVzdCAtZiAnQ0ZVbmlDaGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pQ2hhci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbzogQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZURlY29tcG9zaXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZURlY29tcG9zaXRpb24uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZURlY29tcG9zaXRpb24uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvOiBDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbzogQ0ZVc2VyTm90aWZpY2F0aW9uLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8gYHRlc3QgLWYgJ0NGVXNlck5vdGlmaWNhdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVzZXJOb3RpZmljYXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVzZXJOb3RpZmljYXRpb24uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVzZXJOb3RpZmljYXRpb24uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLmxvIGB0ZXN0IC1mICdDRlVzZXJOb3RpZmljYXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVc2VyTm90aWZpY2F0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVzZXJOb3RpZmljYXRpb24uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlVzZXJOb3RpZmljYXRpb24uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVXNlck5vdGlmaWNhdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXNlck5vdGlmaWNhdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXNlck5vdGlmaWNhdGlvbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVdGlsaXRpZXMubG86IENGVXRpbGl0aWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXRpbGl0aWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlV0aWxpdGllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXRpbGl0aWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVdGlsaXRpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlV0aWxpdGllcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlV0aWxpdGllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXRpbGl0aWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlV0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVdGlsaXRpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlV0aWxpdGllcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZVdGlsaXRpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlV0aWxpdGllcy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZVdGlsaXRpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlV0aWxpdGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlV0aWxpdGllcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlV0aWxpdGllcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZWZXJzaW9uLmxvOiBDRlZlcnNpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZWZXJzaW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlZlcnNpb24uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVmVyc2lvbi5sbyBgdGVzdCAtZiAnQ0ZWZXJzaW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVmVyc2lvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVmVyc2lvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVmVyc2lvbi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlZlcnNpb24uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlZlcnNpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVmVyc2lvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZWZXJzaW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlZlcnNpb24ubG8gYHRlc3QgLWYgJ0NGVmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlZlcnNpb24uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVmVyc2lvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGVmVyc2lvbi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZWZXJzaW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZWZXJzaW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZWZXJzaW9uLmxvIGB0ZXN0IC1mICdDRlZlcnNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZWZXJzaW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZWZXJzaW9uLmxvIGB0ZXN0IC1mICdDRlZlcnNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZWZXJzaW9uLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG86IENGV2luZG93c01lc3NhZ2VRdWV1ZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvIGB0ZXN0IC1mICdDRldpbmRvd3NNZXNzYWdlUXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5sbyBgdGVzdCAtZiAnQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGV2luZG93c01lc3NhZ2VRdWV1ZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRldpbmRvd3NNZXNzYWdlUXVldWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gYHRlc3QgLWYgJ0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRldpbmRvd3NNZXNzYWdlUXVldWUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gYHRlc3QgLWYgJ0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRldpbmRvd3NNZXNzYWdlUXVldWUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG86IENGWE1MSW5wdXRTdHJlYW0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZYTUxJbnB1dFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTElucHV0U3RyZWFtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZYTUxJbnB1dFN0cmVhbS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGWE1MSW5wdXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxJbnB1dFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MSW5wdXRTdHJlYW0uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGWE1MSW5wdXRTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTElucHV0U3RyZWFtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZYTUxJbnB1dFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTElucHV0U3RyZWFtLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZYTUxJbnB1dFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTElucHV0U3RyZWFtLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTE5vZGUubG86IENGWE1MTm9kZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTE5vZGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MTm9kZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxOb2RlLmxvIGB0ZXN0IC1mICdDRlhNTE5vZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxOb2RlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxOb2RlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxOb2RlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MTm9kZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MTm9kZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxOb2RlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTE5vZGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MTm9kZS5sbyBgdGVzdCAtZiAnQ0ZYTUxOb2RlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MTm9kZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxOb2RlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxOb2RlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTE5vZGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTE5vZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTE5vZGUubG8gYHRlc3QgLWYgJ0NGWE1MTm9kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTE5vZGUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTE5vZGUubG8gYHRlc3QgLWYgJ0NGWE1MTm9kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTE5vZGUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUGFyc2VyLmxvOiBDRlhNTFBhcnNlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFBhcnNlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQYXJzZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUGFyc2VyLmxvIGB0ZXN0IC1mICdDRlhNTFBhcnNlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFBhcnNlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUGFyc2VyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQYXJzZXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZYTUxQYXJzZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFBhcnNlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQYXJzZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUGFyc2VyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUGFyc2VyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQYXJzZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGWE1MUGFyc2VyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQYXJzZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG86IENGWE1MUHJlZmVyZW5jZXNEb21haW4uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbyBgdGVzdCAtZiAnQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gYHRlc3QgLWYgJ0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbyBgdGVzdCAtZiAnQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbyBgdGVzdCAtZiAnQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFRyZWUubG86IENGWE1MVHJlZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFRyZWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MVHJlZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxUcmVlLmxvIGB0ZXN0IC1mICdDRlhNTFRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxUcmVlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxUcmVlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxUcmVlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MVHJlZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MVHJlZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxUcmVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFRyZWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2xhLUNGWE1MVHJlZS5sbyBgdGVzdCAtZiAnQ0ZYTUxUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MVHJlZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxUcmVlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fbGEtQ0ZYTUxUcmVlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTFRyZWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFRyZWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFRyZWUubG8gYHRlc3QgLWYgJ0NGWE1MVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFRyZWUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9sYS1DRlhNTFRyZWUubG8gYHRlc3QgLWYgJ0NGWE1MVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFRyZWUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbzogQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5sbzogQ0ZBcnJheS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LmxvIGB0ZXN0IC1mICdDRkFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXJyYXkuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkFycmF5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5sbyBgdGVzdCAtZiAnQ0ZBcnJheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkFycmF5LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZBcnJheS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZBcnJheS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQXJyYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LmxvIGB0ZXN0IC1mICdDRkFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXJyYXkuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkFycmF5LmxvIGB0ZXN0IC1mICdDRkFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXJyYXkuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFnLmxvOiBDRkJhZy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYWcuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFnLmxvIGB0ZXN0IC1mICdDRkJhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhZy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFnLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYWcuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZCYWcuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYWcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFnLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhZy5sbyBgdGVzdCAtZiAnQ0ZCYWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYWcuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFnLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYWcuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQmFnLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYWcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhZy5sbyBgdGVzdCAtZiAnQ0ZCYWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYWcuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhZy5sbyBgdGVzdCAtZiAnQ0ZCYWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYWcuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFzZS5sbzogQ0ZCYXNlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFzZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYXNlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhc2UubG8gYHRlc3QgLWYgJ0NGQmFzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhc2UuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhc2UuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhc2UuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZCYXNlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYXNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhc2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFzZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCYXNlLmxvIGB0ZXN0IC1mICdDRkJhc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYXNlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhc2UuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJhc2UuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQmFzZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFzZS5sbyBgdGVzdCAtZiAnQ0ZCYXNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFzZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmFzZS5sbyBgdGVzdCAtZiAnQ0ZCYXNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFzZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlIZWFwLmxvOiBDRkJpbmFyeUhlYXAuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlIZWFwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeUhlYXAuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5SGVhcC5sbyBgdGVzdCAtZiAnQ0ZCaW5hcnlIZWFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmluYXJ5SGVhcC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5SGVhcC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5SGVhcC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJpbmFyeUhlYXAuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeUhlYXAubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5SGVhcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlIZWFwLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeUhlYXAubG8gYHRlc3QgLWYgJ0NGQmluYXJ5SGVhcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeUhlYXAuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5SGVhcC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5SGVhcC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCaW5hcnlIZWFwLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlIZWFwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlIZWFwLmxvIGB0ZXN0IC1mICdDRkJpbmFyeUhlYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlIZWFwLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlIZWFwLmxvIGB0ZXN0IC1mICdDRkJpbmFyeUhlYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlIZWFwLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LmxvOiBDRkJpbmFyeVBMaXN0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QubG8gYHRlc3QgLWYgJ0NGQmluYXJ5UExpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlQTGlzdC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQmluYXJ5UExpc3QuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LmxvIGB0ZXN0IC1mICdDRkJpbmFyeVBMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmluYXJ5UExpc3QuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpbmFyeVBMaXN0LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkJpbmFyeVBMaXN0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaW5hcnlQTGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QubG8gYHRlc3QgLWYgJ0NGQmluYXJ5UExpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlQTGlzdC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQmluYXJ5UExpc3QubG8gYHRlc3QgLWYgJ0NGQmluYXJ5UExpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlQTGlzdC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaXRWZWN0b3IubG86IENGQml0VmVjdG9yLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQml0VmVjdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpdFZlY3Rvci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaXRWZWN0b3IuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpdFZlY3Rvci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJpdFZlY3Rvci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQml0VmVjdG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpdFZlY3Rvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaXRWZWN0b3IuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQml0VmVjdG9yLmxvIGB0ZXN0IC1mICdDRkJpdFZlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpdFZlY3Rvci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCaXRWZWN0b3IuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpdFZlY3Rvci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCaXRWZWN0b3IuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJpdFZlY3Rvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQml0VmVjdG9yLmxvIGB0ZXN0IC1mICdDRkJpdFZlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpdFZlY3Rvci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQml0VmVjdG9yLmxvIGB0ZXN0IC1mICdDRkJpdFZlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpdFZlY3Rvci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbzogQ0ZCdWlsdGluQ29udmVydGVycy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIGB0ZXN0IC1mICdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVpbHRpbkNvbnZlcnRlcnMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbyBgdGVzdCAtZiAnQ0ZCdWlsdGluQ29udmVydGVycy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCdWlsdGluQ29udmVydGVycy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIGB0ZXN0IC1mICdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVpbHRpbkNvbnZlcnRlcnMuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIGB0ZXN0IC1mICdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVpbHRpbkNvbnZlcnRlcnMuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlLmxvOiBDRkJ1bmRsZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZCdW5kbGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZS5sbyBgdGVzdCAtZiAnQ0ZCdW5kbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQnVuZGxlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZS5sbyBgdGVzdCAtZiAnQ0ZCdW5kbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZS5sbyBgdGVzdCAtZiAnQ0ZCdW5kbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbzogQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZV9SZXNvdXJjZXMubG8gYHRlc3QgLWYgJ0NGQnVuZGxlX1Jlc291cmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZV9SZXNvdXJjZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZCdW5kbGVfUmVzb3VyY2VzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZV9SZXNvdXJjZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQnVuZGxlX1Jlc291cmNlcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbyBgdGVzdCAtZiAnQ0ZCdW5kbGVfUmVzb3VyY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlX1Jlc291cmNlcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbyBgdGVzdCAtZiAnQ0ZCdW5kbGVfUmVzb3VyY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlX1Jlc291cmNlcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5sbzogQ0ZDYWxlbmRhci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLmxvIGB0ZXN0IC1mICdDRkNhbGVuZGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2FsZW5kYXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkNhbGVuZGFyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5sbyBgdGVzdCAtZiAnQ0ZDYWxlbmRhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNhbGVuZGFyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDYWxlbmRhci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZDYWxlbmRhci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ2FsZW5kYXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLmxvIGB0ZXN0IC1mICdDRkNhbGVuZGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2FsZW5kYXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNhbGVuZGFyLmxvIGB0ZXN0IC1mICdDRkNhbGVuZGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2FsZW5kYXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ2hhcmFjdGVyU2V0LmxvOiBDRkNoYXJhY3RlclNldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNoYXJhY3RlclNldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDaGFyYWN0ZXJTZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIGB0ZXN0IC1mICdDRkNoYXJhY3RlclNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNoYXJhY3RlclNldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ2hhcmFjdGVyU2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDaGFyYWN0ZXJTZXQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZDaGFyYWN0ZXJTZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNoYXJhY3RlclNldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDaGFyYWN0ZXJTZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ2hhcmFjdGVyU2V0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNoYXJhY3RlclNldC5sbyBgdGVzdCAtZiAnQ0ZDaGFyYWN0ZXJTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDaGFyYWN0ZXJTZXQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ2hhcmFjdGVyU2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDaGFyYWN0ZXJTZXQuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQ2hhcmFjdGVyU2V0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDaGFyYWN0ZXJTZXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNoYXJhY3RlclNldC5sbyBgdGVzdCAtZiAnQ0ZDaGFyYWN0ZXJTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDaGFyYWN0ZXJTZXQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNoYXJhY3RlclNldC5sbyBgdGVzdCAtZiAnQ0ZDaGFyYWN0ZXJTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDaGFyYWN0ZXJTZXQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvOiBDRkNvbmNyZXRlU3RyZWFtcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ29uY3JldGVTdHJlYW1zLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZDb25jcmV0ZVN0cmVhbXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ29uY3JldGVTdHJlYW1zLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyBgdGVzdCAtZiAnQ0ZDb25jcmV0ZVN0cmVhbXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDb25jcmV0ZVN0cmVhbXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGQ29uY3JldGVTdHJlYW1zLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQ29uY3JldGVTdHJlYW1zLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyBgdGVzdCAtZiAnQ0ZDb25jcmV0ZVN0cmVhbXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDb25jcmV0ZVN0cmVhbXMuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyBgdGVzdCAtZiAnQ0ZDb25jcmV0ZVN0cmVhbXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDb25jcmV0ZVN0cmVhbXMuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0YS5sbzogQ0ZEYXRhLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0YS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRhLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGEubG8gYHRlc3QgLWYgJ0NGRGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGEuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGEuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGEuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEYXRhLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0YS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRhLmxvIGB0ZXN0IC1mICdDRkRhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRhLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGEuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGEuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGRGF0YS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0YS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0YS5sbyBgdGVzdCAtZiAnQ0ZEYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0YS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0YS5sbyBgdGVzdCAtZiAnQ0ZEYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0YS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvOiBDRkRhdGVGb3JtYXR0ZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGVGb3JtYXR0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZEYXRlRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZUZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZUZvcm1hdHRlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZUZvcm1hdHRlci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkRhdGVGb3JtYXR0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGVGb3JtYXR0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlRm9ybWF0dGVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGVGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGRGF0ZUZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGVGb3JtYXR0ZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZUZvcm1hdHRlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZUZvcm1hdHRlci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZEYXRlRm9ybWF0dGVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRkRhdGVGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlRm9ybWF0dGVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRkRhdGVGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlRm9ybWF0dGVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGUubG86IENGRGF0ZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlLmxvIGB0ZXN0IC1mICdDRkRhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGRGF0ZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGF0ZS5sbyBgdGVzdCAtZiAnQ0ZEYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEYXRlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkRhdGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGUubG8gYHRlc3QgLWYgJ0NGRGF0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRhdGUubG8gYHRlc3QgLWYgJ0NGRGF0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRhdGUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGljdGlvbmFyeS5sbzogQ0ZEaWN0aW9uYXJ5LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGljdGlvbmFyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEaWN0aW9uYXJ5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRpY3Rpb25hcnkubG8gYHRlc3QgLWYgJ0NGRGljdGlvbmFyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkRpY3Rpb25hcnkuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRpY3Rpb25hcnkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRpY3Rpb25hcnkuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEaWN0aW9uYXJ5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEaWN0aW9uYXJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRpY3Rpb25hcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGljdGlvbmFyeS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZEaWN0aW9uYXJ5LmxvIGB0ZXN0IC1mICdDRkRpY3Rpb25hcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEaWN0aW9uYXJ5LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRpY3Rpb25hcnkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkRpY3Rpb25hcnkuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGRGljdGlvbmFyeS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGljdGlvbmFyeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGljdGlvbmFyeS5sbyBgdGVzdCAtZiAnQ0ZEaWN0aW9uYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGljdGlvbmFyeS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRGljdGlvbmFyeS5sbyBgdGVzdCAtZiAnQ0ZEaWN0aW9uYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGljdGlvbmFyeS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5sbzogQ0ZFcnJvci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLmxvIGB0ZXN0IC1mICdDRkVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRXJyb3IuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkVycm9yLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5sbyBgdGVzdCAtZiAnQ0ZFcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkVycm9yLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZFcnJvci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZFcnJvci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLmxvIGB0ZXN0IC1mICdDRkVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRXJyb3IuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkVycm9yLmxvIGB0ZXN0IC1mICdDRkVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRXJyb3IuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRmlsZVV0aWxpdGllcy5sbzogQ0ZGaWxlVXRpbGl0aWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRmlsZVV0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZGaWxlVXRpbGl0aWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkZpbGVVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGRmlsZVV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkZpbGVVdGlsaXRpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkZpbGVVdGlsaXRpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkZpbGVVdGlsaXRpZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZGaWxlVXRpbGl0aWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkZpbGVVdGlsaXRpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRmlsZVV0aWxpdGllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRkZpbGVVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZGaWxlVXRpbGl0aWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkZpbGVVdGlsaXRpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkZpbGVVdGlsaXRpZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGRmlsZVV0aWxpdGllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRmlsZVV0aWxpdGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRmlsZVV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZGaWxlVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRmlsZVV0aWxpdGllcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGRmlsZVV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZGaWxlVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRmlsZVV0aWxpdGllcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvOiBDRkxvY2FsZUlkZW50aWZpZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZUlkZW50aWZpZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGVJZGVudGlmaWVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTG9jYWxlSWRlbnRpZmllci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlSWRlbnRpZmllci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlSWRlbnRpZmllci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkxvY2FsZUlkZW50aWZpZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8gYHRlc3QgLWYgJ0NGTG9jYWxlSWRlbnRpZmllci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZUlkZW50aWZpZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlSWRlbnRpZmllci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlSWRlbnRpZmllci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZMb2NhbGVJZGVudGlmaWVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIGB0ZXN0IC1mICdDRkxvY2FsZUlkZW50aWZpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIGB0ZXN0IC1mICdDRkxvY2FsZUlkZW50aWZpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZS5sbzogQ0ZMb2NhbGUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZS5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGTG9jYWxlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGUubG8gYHRlc3QgLWYgJ0NGTG9jYWxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTG9jYWxlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRkxvY2FsZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkxvY2FsZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTG9jYWxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGUubG8gYHRlc3QgLWYgJ0NGTG9jYWxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTG9jYWxlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZMb2NhbGUubG8gYHRlc3QgLWYgJ0NGTG9jYWxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTG9jYWxlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LmxvOiBDRk1hY2hQb3J0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQubG8gYHRlc3QgLWYgJ0NGTWFjaFBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNYWNoUG9ydC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGTWFjaFBvcnQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LmxvIGB0ZXN0IC1mICdDRk1hY2hQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWFjaFBvcnQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1hY2hQb3J0LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRk1hY2hQb3J0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNYWNoUG9ydC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQubG8gYHRlc3QgLWYgJ0NGTWFjaFBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNYWNoUG9ydC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWFjaFBvcnQubG8gYHRlc3QgLWYgJ0NGTWFjaFBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNYWNoUG9ydC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5sbzogQ0ZNZXNzYWdlUG9ydC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LmxvIGB0ZXN0IC1mICdDRk1lc3NhZ2VQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWVzc2FnZVBvcnQuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRk1lc3NhZ2VQb3J0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNZXNzYWdlUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1lc3NhZ2VQb3J0LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZNZXNzYWdlUG9ydC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZNZXNzYWdlUG9ydC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTWVzc2FnZVBvcnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LmxvIGB0ZXN0IC1mICdDRk1lc3NhZ2VQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWVzc2FnZVBvcnQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk1lc3NhZ2VQb3J0LmxvIGB0ZXN0IC1mICdDRk1lc3NhZ2VQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWVzc2FnZVBvcnQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvOiBDRk51bWJlckZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlckZvcm1hdHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRk51bWJlckZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlckZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyRm9ybWF0dGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZOdW1iZXJGb3JtYXR0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlckZvcm1hdHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyRm9ybWF0dGVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlckZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXJGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXJGb3JtYXR0ZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyRm9ybWF0dGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTnVtYmVyRm9ybWF0dGVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlckZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXJGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXJGb3JtYXR0ZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlckZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXJGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXJGb3JtYXR0ZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyLmxvOiBDRk51bWJlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZOdW1iZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGTnVtYmVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTnVtYmVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZOdW1iZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRk51bWJlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0ubG86IENGUGxhdGZvcm0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5sbyBgdGVzdCAtZiAnQ0ZQbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsYXRmb3JtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZQbGF0Zm9ybS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0ubG8gYHRlc3QgLWYgJ0NGUGxhdGZvcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbGF0Zm9ybS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGxhdGZvcm0uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUGxhdGZvcm0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsYXRmb3JtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5sbyBgdGVzdCAtZiAnQ0ZQbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsYXRmb3JtLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbGF0Zm9ybS5sbyBgdGVzdCAtZiAnQ0ZQbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsYXRmb3JtLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LmxvOiBDRlBsdWdJbl9GYWN0b3J5LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0ZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fRmFjdG9yeS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUGx1Z0luX0ZhY3RvcnkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9GYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0ZhY3RvcnkuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9GYWN0b3J5LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlBsdWdJbl9GYWN0b3J5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0ZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fRmFjdG9yeS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0ZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fRmFjdG9yeS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG86IENGUGx1Z0luX0luc3RhbmNlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9JbnN0YW5jZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9JbnN0YW5jZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlBsdWdJbl9JbnN0YW5jZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9JbnN0YW5jZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9JbnN0YW5jZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9JbnN0YW5jZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9JbnN0YW5jZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZQbHVnSW5fSW5zdGFuY2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9JbnN0YW5jZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9JbnN0YW5jZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9JbnN0YW5jZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9JbnN0YW5jZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9JbnN0YW5jZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW4ubG86IENGUGx1Z0luLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW4uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlBsdWdJbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW4uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZQbHVnSW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvOiBDRlBsdWdJbl9QbHVnSW4uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9QbHVnSW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX1BsdWdJbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX1BsdWdJbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX1BsdWdJbi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlBsdWdJbl9QbHVnSW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9QbHVnSW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fUGx1Z0luLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlBsdWdJbl9QbHVnSW4ubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX1BsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9QbHVnSW4uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX1BsdWdJbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUGx1Z0luX1BsdWdJbi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZQbHVnSW5fUGx1Z0luLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9QbHVnSW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fUGx1Z0luLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9QbHVnSW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fUGx1Z0luLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLmxvOiBDRlByZWZlcmVuY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcmVmZXJlbmNlcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUHJlZmVyZW5jZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRlByZWZlcmVuY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUHJlZmVyZW5jZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByZWZlcmVuY2VzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlByZWZlcmVuY2VzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQcmVmZXJlbmNlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcmVmZXJlbmNlcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcmVmZXJlbmNlcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQcm9wZXJ0eUxpc3QubG86IENGUHJvcGVydHlMaXN0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJvcGVydHlMaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByb3BlcnR5TGlzdC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQcm9wZXJ0eUxpc3QubG8gYHRlc3QgLWYgJ0NGUHJvcGVydHlMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUHJvcGVydHlMaXN0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQcm9wZXJ0eUxpc3QuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByb3BlcnR5TGlzdC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlByb3BlcnR5TGlzdC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJvcGVydHlMaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByb3BlcnR5TGlzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQcm9wZXJ0eUxpc3QuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJvcGVydHlMaXN0LmxvIGB0ZXN0IC1mICdDRlByb3BlcnR5TGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByb3BlcnR5TGlzdC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZQcm9wZXJ0eUxpc3QuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByb3BlcnR5TGlzdC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZQcm9wZXJ0eUxpc3QuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlByb3BlcnR5TGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJvcGVydHlMaXN0LmxvIGB0ZXN0IC1mICdDRlByb3BlcnR5TGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByb3BlcnR5TGlzdC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUHJvcGVydHlMaXN0LmxvIGB0ZXN0IC1mICdDRlByb3BlcnR5TGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByb3BlcnR5TGlzdC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW5Mb29wLmxvOiBDRlJ1bkxvb3AuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW5Mb29wLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bkxvb3AuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVuTG9vcC5sbyBgdGVzdCAtZiAnQ0ZSdW5Mb29wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVuTG9vcC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVuTG9vcC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVuTG9vcC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlJ1bkxvb3AuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bkxvb3AubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVuTG9vcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW5Mb29wLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bkxvb3AubG8gYHRlc3QgLWYgJ0NGUnVuTG9vcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlJ1bkxvb3AuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVuTG9vcC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVuTG9vcC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZSdW5Mb29wLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW5Mb29wLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW5Mb29wLmxvIGB0ZXN0IC1mICdDRlJ1bkxvb3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW5Mb29wLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW5Mb29wLmxvIGB0ZXN0IC1mICdDRlJ1bkxvb3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW5Mb29wLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bnRpbWUubG86IENGUnVudGltZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bnRpbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVudGltZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW50aW1lLmxvIGB0ZXN0IC1mICdDRlJ1bnRpbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW50aW1lLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW50aW1lLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW50aW1lLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUnVudGltZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVudGltZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW50aW1lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bnRpbWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGUnVudGltZS5sbyBgdGVzdCAtZiAnQ0ZSdW50aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVudGltZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW50aW1lLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZSdW50aW1lLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlJ1bnRpbWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bnRpbWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bnRpbWUubG8gYHRlc3QgLWYgJ0NGUnVudGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlJ1bnRpbWUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlJ1bnRpbWUubG8gYHRlc3QgLWYgJ0NGUnVudGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlJ1bnRpbWUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU2V0LmxvOiBDRlNldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU2V0LmxvIGB0ZXN0IC1mICdDRlNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTZXQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU2V0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNldC5sbyBgdGVzdCAtZiAnQ0ZTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTZXQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTZXQuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU2V0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTZXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNldC5sbyBgdGVzdCAtZiAnQ0ZTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTZXQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNldC5sbyBgdGVzdCAtZiAnQ0ZTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTZXQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0LmxvOiBDRlNvY2tldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0LmxvIGB0ZXN0IC1mICdDRlNvY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTb2NrZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldC5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXQuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU29ja2V0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldC5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldC5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0U3RyZWFtLmxvOiBDRlNvY2tldFN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldFN0cmVhbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXRTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0U3RyZWFtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXRTdHJlYW0uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTb2NrZXRTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldFN0cmVhbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXRTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0U3RyZWFtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXRTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ja2V0U3RyZWFtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXRTdHJlYW0uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU29ja2V0U3RyZWFtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb2NrZXRTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXRTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvY2tldFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXRTdHJlYW0uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ydEZ1bmN0aW9ucy5sbzogQ0ZTb3J0RnVuY3Rpb25zLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb3J0RnVuY3Rpb25zLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvcnRGdW5jdGlvbnMubG8gYHRlc3QgLWYgJ0NGU29ydEZ1bmN0aW9ucy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvcnRGdW5jdGlvbnMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvcnRGdW5jdGlvbnMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvcnRGdW5jdGlvbnMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTb3J0RnVuY3Rpb25zLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvcnRGdW5jdGlvbnMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ydEZ1bmN0aW9ucy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvIGB0ZXN0IC1mICdDRlNvcnRGdW5jdGlvbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb3J0RnVuY3Rpb25zLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvcnRGdW5jdGlvbnMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlNvcnRGdW5jdGlvbnMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU29ydEZ1bmN0aW9ucy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ydEZ1bmN0aW9ucy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyBgdGVzdCAtZiAnQ0ZTb3J0RnVuY3Rpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ydEZ1bmN0aW9ucy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyBgdGVzdCAtZiAnQ0ZTb3J0RnVuY3Rpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ydEZ1bmN0aW9ucy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdG9yYWdlLmxvOiBDRlN0b3JhZ2UuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdG9yYWdlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0b3JhZ2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RvcmFnZS5sbyBgdGVzdCAtZiAnQ0ZTdG9yYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RvcmFnZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RvcmFnZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RvcmFnZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlN0b3JhZ2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0b3JhZ2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RvcmFnZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdG9yYWdlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0b3JhZ2UubG8gYHRlc3QgLWYgJ0NGU3RvcmFnZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0b3JhZ2UuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RvcmFnZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RvcmFnZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTdG9yYWdlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdG9yYWdlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdG9yYWdlLmxvIGB0ZXN0IC1mICdDRlN0b3JhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdG9yYWdlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdG9yYWdlLmxvIGB0ZXN0IC1mICdDRlN0b3JhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdG9yYWdlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmVhbS5sbzogQ0ZTdHJlYW0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyZWFtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyZWFtLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyZWFtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyZWFtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmVhbS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGU3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyZWFtLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyZWFtLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmVhbS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyZWFtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGU3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyZWFtLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGU3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyZWFtLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvOiBDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG86IENGU3RyaW5nRW5jb2RpbmdzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5ncy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5ncy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlN0cmluZ0VuY29kaW5ncy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5ncy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ0VuY29kaW5ncy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5ncy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5ncy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTdHJpbmdFbmNvZGluZ3MuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ0VuY29kaW5ncy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ0VuY29kaW5ncy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5ncy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ0VuY29kaW5ncy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5ncy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmcubG86IENGU3RyaW5nLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmcuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlN0cmluZy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmcuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nLmxvIGB0ZXN0IC1mICdDRlN0cmluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmcuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTdHJpbmcuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nLmxvIGB0ZXN0IC1mICdDRlN0cmluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nLmxvIGB0ZXN0IC1mICdDRlN0cmluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvOiBDRlN0cmluZ1NjYW5uZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1NjYW5uZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nU2Nhbm5lci5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdTY2FubmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nU2Nhbm5lci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nU2Nhbm5lci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nU2Nhbm5lci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlN0cmluZ1NjYW5uZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1NjYW5uZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nU2Nhbm5lci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdTY2FubmVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1NjYW5uZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nU2Nhbm5lci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1NjYW5uZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nU2Nhbm5lci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nU2Nhbm5lci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTdHJpbmdTY2FubmVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1NjYW5uZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdTY2FubmVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1NjYW5uZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdTY2FubmVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1V0aWxpdGllcy5sbzogQ0ZTdHJpbmdVdGlsaXRpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdVdGlsaXRpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1V0aWxpdGllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nVXRpbGl0aWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1V0aWxpdGllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGU3RyaW5nVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nVXRpbGl0aWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN0cmluZ1V0aWxpdGllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmluZ1V0aWxpdGllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGU3RyaW5nVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nVXRpbGl0aWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGU3RyaW5nVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nVXRpbGl0aWVzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvOiBDRlN5c3RlbURpcmVjdG9yaWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gYHRlc3QgLWYgJ0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvIGB0ZXN0IC1mICdDRlN5c3RlbURpcmVjdG9yaWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3lzdGVtRGlyZWN0b3JpZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlN5c3RlbURpcmVjdG9yaWVzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN5c3RlbURpcmVjdG9yaWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gYHRlc3QgLWYgJ0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gYHRlc3QgLWYgJ0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5sbzogQ0ZUaW1lWm9uZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLmxvIGB0ZXN0IC1mICdDRlRpbWVab25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVGltZVpvbmUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlRpbWVab25lLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5sbyBgdGVzdCAtZiAnQ0ZUaW1lWm9uZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRpbWVab25lLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUaW1lWm9uZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZUaW1lWm9uZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVGltZVpvbmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLmxvIGB0ZXN0IC1mICdDRlRpbWVab25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVGltZVpvbmUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRpbWVab25lLmxvIGB0ZXN0IC1mICdDRlRpbWVab25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVGltZVpvbmUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVHJlZS5sbzogQ0ZUcmVlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVHJlZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUcmVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRyZWUubG8gYHRlc3QgLWYgJ0NGVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRyZWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRyZWUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRyZWUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZUcmVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUcmVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRyZWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVHJlZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZUcmVlLmxvIGB0ZXN0IC1mICdDRlRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUcmVlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRyZWUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlRyZWUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVHJlZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVHJlZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVHJlZS5sbyBgdGVzdCAtZiAnQ0ZUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVHJlZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVHJlZS5sbyBgdGVzdCAtZiAnQ0ZUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVHJlZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkwubG86IENGVVJMLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkwuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlVSTC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkwuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMLmxvIGB0ZXN0IC1mICdDRlVSTC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkwuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZVUkwuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMLmxvIGB0ZXN0IC1mICdDRlVSTC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMLmxvIGB0ZXN0IC1mICdDRlVSTC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkxBY2Nlc3MubG86IENGVVJMQWNjZXNzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMQWNjZXNzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTEFjY2Vzcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkxBY2Nlc3MubG8gYHRlc3QgLWYgJ0NGVVJMQWNjZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMQWNjZXNzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkxBY2Nlc3MuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTEFjY2Vzcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlVSTEFjY2Vzcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMQWNjZXNzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTEFjY2Vzcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkxBY2Nlc3MuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMQWNjZXNzLmxvIGB0ZXN0IC1mICdDRlVSTEFjY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTEFjY2Vzcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVUkxBY2Nlc3MuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTEFjY2Vzcy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZVUkxBY2Nlc3MuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVSTEFjY2Vzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMQWNjZXNzLmxvIGB0ZXN0IC1mICdDRlVSTEFjY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTEFjY2Vzcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVJMQWNjZXNzLmxvIGB0ZXN0IC1mICdDRlVSTEFjY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTEFjY2Vzcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVVUlELmxvOiBDRlVVSUQuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVVUlELmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVVSUQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVVJRC5sbyBgdGVzdCAtZiAnQ0ZVVUlELmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVVJRC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVVJRC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVVJRC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlVVSUQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVVSUQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVVJRC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVVUlELlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVVSUQubG8gYHRlc3QgLWYgJ0NGVVVJRC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVVSUQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVVJRC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVVVJRC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZVVUlELmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVVUlELmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVVUlELmxvIGB0ZXN0IC1mICdDRlVVSUQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVVUlELmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVVUlELmxvIGB0ZXN0IC1mICdDRlVVSUQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVVUlELmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaUNoYXIubG86IENGVW5pQ2hhci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaUNoYXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pQ2hhci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmlDaGFyLmxvIGB0ZXN0IC1mICdDRlVuaUNoYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmlDaGFyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmlDaGFyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmlDaGFyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVW5pQ2hhci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pQ2hhci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmlDaGFyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaUNoYXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pQ2hhci5sbyBgdGVzdCAtZiAnQ0ZVbmlDaGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pQ2hhci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmlDaGFyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmlDaGFyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVuaUNoYXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaUNoYXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaUNoYXIubG8gYHRlc3QgLWYgJ0NGVW5pQ2hhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaUNoYXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaUNoYXIubG8gYHRlc3QgLWYgJ0NGVW5pQ2hhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaUNoYXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG86IENGVW5pY29kZURlY29tcG9zaXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG8gYHRlc3QgLWYgJ0NGVW5pY29kZURlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVW5pY29kZURlY29tcG9zaXRpb24uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbzogQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8gYHRlc3QgLWYgJ0NGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8gYHRlc3QgLWYgJ0NGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8gYHRlc3QgLWYgJ0NGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVzZXJOb3RpZmljYXRpb24ubG86IENGVXNlck5vdGlmaWNhdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLmxvIGB0ZXN0IC1mICdDRlVzZXJOb3RpZmljYXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVc2VyTm90aWZpY2F0aW9uLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVXNlck5vdGlmaWNhdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVzZXJOb3RpZmljYXRpb24uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXNlck5vdGlmaWNhdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVzZXJOb3RpZmljYXRpb24uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8gYHRlc3QgLWYgJ0NGVXNlck5vdGlmaWNhdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVzZXJOb3RpZmljYXRpb24uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8gYHRlc3QgLWYgJ0NGVXNlck5vdGlmaWNhdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVzZXJOb3RpZmljYXRpb24uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXRpbGl0aWVzLmxvOiBDRlV0aWxpdGllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlV0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVdGlsaXRpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlV0aWxpdGllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXRpbGl0aWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVdGlsaXRpZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVdGlsaXRpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlV0aWxpdGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVdGlsaXRpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXRpbGl0aWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVXRpbGl0aWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVdGlsaXRpZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVXRpbGl0aWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZVdGlsaXRpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVdGlsaXRpZXMuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVmVyc2lvbi5sbzogQ0ZWZXJzaW9uLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVmVyc2lvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZWZXJzaW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlZlcnNpb24ubG8gYHRlc3QgLWYgJ0NGVmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlZlcnNpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlZlcnNpb24uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlZlcnNpb24uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZWZXJzaW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZWZXJzaW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlZlcnNpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVmVyc2lvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZWZXJzaW9uLmxvIGB0ZXN0IC1mICdDRlZlcnNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZWZXJzaW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlZlcnNpb24uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlZlcnNpb24uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVmVyc2lvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVmVyc2lvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVmVyc2lvbi5sbyBgdGVzdCAtZiAnQ0ZWZXJzaW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVmVyc2lvbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGVmVyc2lvbi5sbyBgdGVzdCAtZiAnQ0ZWZXJzaW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVmVyc2lvbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvOiBDRldpbmRvd3NNZXNzYWdlUXVldWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5sbyBgdGVzdCAtZiAnQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGV2luZG93c01lc3NhZ2VRdWV1ZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRldpbmRvd3NNZXNzYWdlUXVldWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gYHRlc3QgLWYgJ0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRldpbmRvd3NNZXNzYWdlUXVldWUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvIGB0ZXN0IC1mICdDRldpbmRvd3NNZXNzYWdlUXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvIGB0ZXN0IC1mICdDRldpbmRvd3NNZXNzYWdlUXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLmxvOiBDRlhNTElucHV0U3RyZWFtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGWE1MSW5wdXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxJbnB1dFN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MSW5wdXRTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlhNTElucHV0U3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MSW5wdXRTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTElucHV0U3RyZWFtLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTElucHV0U3RyZWFtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGWE1MSW5wdXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxJbnB1dFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGWE1MSW5wdXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxJbnB1dFN0cmVhbS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxOb2RlLmxvOiBDRlhNTE5vZGUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxOb2RlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTE5vZGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MTm9kZS5sbyBgdGVzdCAtZiAnQ0ZYTUxOb2RlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MTm9kZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MTm9kZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MTm9kZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlhNTE5vZGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTE5vZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MTm9kZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxOb2RlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTE5vZGUubG8gYHRlc3QgLWYgJ0NGWE1MTm9kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTE5vZGUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MTm9kZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MTm9kZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZYTUxOb2RlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxOb2RlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxOb2RlLmxvIGB0ZXN0IC1mICdDRlhNTE5vZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxOb2RlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxOb2RlLmxvIGB0ZXN0IC1mICdDRlhNTE5vZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxOb2RlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFBhcnNlci5sbzogQ0ZYTUxQYXJzZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxQYXJzZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUGFyc2VyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFBhcnNlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUGFyc2VyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MUGFyc2VyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxQYXJzZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUGFyc2VyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFBhcnNlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxQYXJzZXIubG8gYHRlc3QgLWYgJ0NGWE1MUGFyc2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MUGFyc2VyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFBhcnNlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUGFyc2VyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTFBhcnNlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUGFyc2VyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxQYXJzZXIubG8gYHRlc3QgLWYgJ0NGWE1MUGFyc2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MUGFyc2VyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxQYXJzZXIubG8gYHRlc3QgLWYgJ0NGWE1MUGFyc2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MUGFyc2VyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvOiBDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gYHRlc3QgLWYgJ0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvIGB0ZXN0IC1mICdDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MUHJlZmVyZW5jZXNEb21haW4uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gYHRlc3QgLWYgJ0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gYHRlc3QgLWYgJ0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxUcmVlLmxvOiBDRlhNTFRyZWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxUcmVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFRyZWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MVHJlZS5sbyBgdGVzdCAtZiAnQ0ZYTUxUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MVHJlZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MVHJlZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MVHJlZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlhNTFRyZWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFRyZWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MVHJlZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxUcmVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9kZWJ1Z19sYS1DRlhNTFRyZWUubG8gYHRlc3QgLWYgJ0NGWE1MVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFRyZWUuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MVHJlZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX2RlYnVnX2xhLUNGWE1MVHJlZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZYTUxUcmVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxUcmVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxUcmVlLmxvIGB0ZXN0IC1mICdDRlhNTFRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxUcmVlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fZGVidWdfbGEtQ0ZYTUxUcmVlLmxvIGB0ZXN0IC1mICdDRlhNTFRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxUcmVlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbzogQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQXBwbGljYXRpb25QcmVmZXJlbmNlcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRkFwcGxpY2F0aW9uUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcHBsaWNhdGlvblByZWZlcmVuY2VzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXJyYXkubG86IENGQXJyYXkuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcnJheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFycmF5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXJyYXkubG8gYHRlc3QgLWYgJ0NGQXJyYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZBcnJheS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcnJheS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcnJheS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkFycmF5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFycmF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFycmF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXJyYXkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZBcnJheS5sbyBgdGVzdCAtZiAnQ0ZBcnJheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkFycmF5LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXJyYXkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXJyYXkuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQXJyYXkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQXJyYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFycmF5LmxvIGB0ZXN0IC1mICdDRkFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXJyYXkuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkFycmF5LmxvIGB0ZXN0IC1mICdDRkFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQXJyYXkuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcubG86IENGQmFnLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFnLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFnLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFnLmxvIGB0ZXN0IC1mICdDRkJhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhZy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFnLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQmFnLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJhZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcubG8gYHRlc3QgLWYgJ0NGQmFnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFnLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFnLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJhZy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCYWcuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFnLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcubG8gYHRlc3QgLWYgJ0NGQmFnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFnLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYWcubG8gYHRlc3QgLWYgJ0NGQmFnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmFnLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFzZS5sbzogQ0ZCYXNlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFzZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJhc2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYXNlLmxvIGB0ZXN0IC1mICdDRkJhc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYXNlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJhc2UuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFzZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJhc2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYXNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmFzZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJhc2UubG8gYHRlc3QgLWYgJ0NGQmFzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJhc2UuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYXNlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJhc2UuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQmFzZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYXNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYXNlLmxvIGB0ZXN0IC1mICdDRkJhc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYXNlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCYXNlLmxvIGB0ZXN0IC1mICdDRkJhc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCYXNlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5SGVhcC5sbzogQ0ZCaW5hcnlIZWFwLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5SGVhcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeUhlYXAuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlIZWFwLmxvIGB0ZXN0IC1mICdDRkJpbmFyeUhlYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlIZWFwLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeUhlYXAuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5SGVhcC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJpbmFyeUhlYXAuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5SGVhcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlIZWFwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5SGVhcC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeUhlYXAubG8gYHRlc3QgLWYgJ0NGQmluYXJ5SGVhcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeUhlYXAuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlIZWFwLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeUhlYXAuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQmluYXJ5SGVhcC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlIZWFwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlIZWFwLmxvIGB0ZXN0IC1mICdDRkJpbmFyeUhlYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlIZWFwLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlIZWFwLmxvIGB0ZXN0IC1mICdDRkJpbmFyeUhlYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlIZWFwLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5UExpc3QubG86IENGQmluYXJ5UExpc3QuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlQTGlzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeVBMaXN0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5UExpc3QubG8gYHRlc3QgLWYgJ0NGQmluYXJ5UExpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCaW5hcnlQTGlzdC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlQTGlzdC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlQTGlzdC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJpbmFyeVBMaXN0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeVBMaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeVBMaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5UExpc3QuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaW5hcnlQTGlzdC5sbyBgdGVzdCAtZiAnQ0ZCaW5hcnlQTGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpbmFyeVBMaXN0LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5UExpc3QuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5UExpc3QuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQmluYXJ5UExpc3QuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQmluYXJ5UExpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeVBMaXN0LmxvIGB0ZXN0IC1mICdDRkJpbmFyeVBMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmluYXJ5UExpc3QuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpbmFyeVBMaXN0LmxvIGB0ZXN0IC1mICdDRkJpbmFyeVBMaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQmluYXJ5UExpc3QuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IubG86IENGQml0VmVjdG9yLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQml0VmVjdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQml0VmVjdG9yLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQml0VmVjdG9yLmxvIGB0ZXN0IC1mICdDRkJpdFZlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJpdFZlY3Rvci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQml0VmVjdG9yLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQml0VmVjdG9yLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpdFZlY3Rvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQml0VmVjdG9yLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJpdFZlY3Rvci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCaXRWZWN0b3IuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQml0VmVjdG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCaXRWZWN0b3IubG8gYHRlc3QgLWYgJ0NGQml0VmVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQml0VmVjdG9yLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG86IENGQnVpbHRpbkNvbnZlcnRlcnMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8gYHRlc3QgLWYgJ0NGQnVpbHRpbkNvbnZlcnRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdWlsdGluQ29udmVydGVycy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdWlsdGluQ29udmVydGVycy5sbyBgdGVzdCAtZiAnQ0ZCdWlsdGluQ29udmVydGVycy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQnVpbHRpbkNvbnZlcnRlcnMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVpbHRpbkNvbnZlcnRlcnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIGB0ZXN0IC1mICdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVpbHRpbkNvbnZlcnRlcnMuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1aWx0aW5Db252ZXJ0ZXJzLmxvIGB0ZXN0IC1mICdDRkJ1aWx0aW5Db252ZXJ0ZXJzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVpbHRpbkNvbnZlcnRlcnMuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUubG86IENGQnVuZGxlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQnVuZGxlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1bmRsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUubG8gYHRlc3QgLWYgJ0NGQnVuZGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1bmRsZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZCdW5kbGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUubG8gYHRlc3QgLWYgJ0NGQnVuZGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGUubG8gYHRlc3QgLWYgJ0NGQnVuZGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQnVuZGxlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbzogQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQnVuZGxlX1Jlc291cmNlcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMubG8gYHRlc3QgLWYgJ0NGQnVuZGxlX1Jlc291cmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkJ1bmRsZV9SZXNvdXJjZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkJ1bmRsZV9SZXNvdXJjZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQnVuZGxlX1Jlc291cmNlcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZCdW5kbGVfUmVzb3VyY2VzLmxvIGB0ZXN0IC1mICdDRkJ1bmRsZV9SZXNvdXJjZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZCdW5kbGVfUmVzb3VyY2VzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2FsZW5kYXIubG86IENGQ2FsZW5kYXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDYWxlbmRhci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNhbGVuZGFyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2FsZW5kYXIubG8gYHRlc3QgLWYgJ0NGQ2FsZW5kYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDYWxlbmRhci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDYWxlbmRhci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDYWxlbmRhci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkNhbGVuZGFyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNhbGVuZGFyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNhbGVuZGFyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2FsZW5kYXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDYWxlbmRhci5sbyBgdGVzdCAtZiAnQ0ZDYWxlbmRhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNhbGVuZGFyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2FsZW5kYXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2FsZW5kYXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQ2FsZW5kYXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2FsZW5kYXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNhbGVuZGFyLmxvIGB0ZXN0IC1mICdDRkNhbGVuZGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2FsZW5kYXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNhbGVuZGFyLmxvIGB0ZXN0IC1mICdDRkNhbGVuZGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2FsZW5kYXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQubG86IENGQ2hhcmFjdGVyU2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2hhcmFjdGVyU2V0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2hhcmFjdGVyU2V0LmxvIGB0ZXN0IC1mICdDRkNoYXJhY3RlclNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNoYXJhY3RlclNldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2hhcmFjdGVyU2V0LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGQ2hhcmFjdGVyU2V0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNoYXJhY3RlclNldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQubG8gYHRlc3QgLWYgJ0NGQ2hhcmFjdGVyU2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2hhcmFjdGVyU2V0LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2hhcmFjdGVyU2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNoYXJhY3RlclNldC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZDaGFyYWN0ZXJTZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ2hhcmFjdGVyU2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQubG8gYHRlc3QgLWYgJ0NGQ2hhcmFjdGVyU2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2hhcmFjdGVyU2V0LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDaGFyYWN0ZXJTZXQubG8gYHRlc3QgLWYgJ0NGQ2hhcmFjdGVyU2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGQ2hhcmFjdGVyU2V0LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvOiBDRkNvbmNyZXRlU3RyZWFtcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNvbmNyZXRlU3RyZWFtcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbyBgdGVzdCAtZiAnQ0ZDb25jcmV0ZVN0cmVhbXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZDb25jcmV0ZVN0cmVhbXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNvbmNyZXRlU3RyZWFtcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkNvbmNyZXRlU3RyZWFtcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNvbmNyZXRlU3RyZWFtcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZDb25jcmV0ZVN0cmVhbXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGQ29uY3JldGVTdHJlYW1zLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkNvbmNyZXRlU3RyZWFtcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGQ29uY3JldGVTdHJlYW1zLmxvIGB0ZXN0IC1mICdDRkNvbmNyZXRlU3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkNvbmNyZXRlU3RyZWFtcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGEubG86IENGRGF0YS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRhLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0YS5sbyBgdGVzdCAtZiAnQ0ZEYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0YS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRhLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGEuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEYXRhLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0YS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGEuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRhLmxvIGB0ZXN0IC1mICdDRkRhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRhLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0YS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRhLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkRhdGEuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0YS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0YS5sbyBgdGVzdCAtZiAnQ0ZEYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0YS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0YS5sbyBgdGVzdCAtZiAnQ0ZEYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0YS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGVGb3JtYXR0ZXIubG86IENGRGF0ZUZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGVGb3JtYXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlRm9ybWF0dGVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZEYXRlRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZUZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlRm9ybWF0dGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGVGb3JtYXR0ZXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEYXRlRm9ybWF0dGVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGVGb3JtYXR0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGVGb3JtYXR0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRkRhdGVGb3JtYXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlRm9ybWF0dGVyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZUZvcm1hdHRlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlRm9ybWF0dGVyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkRhdGVGb3JtYXR0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZUZvcm1hdHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZEYXRlRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZUZvcm1hdHRlci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZUZvcm1hdHRlci5sbyBgdGVzdCAtZiAnQ0ZEYXRlRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZUZvcm1hdHRlci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGUubG86IENGRGF0ZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZS5sbyBgdGVzdCAtZiAnQ0ZEYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEYXRlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRhdGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlLmxvIGB0ZXN0IC1mICdDRkRhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEYXRlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEYXRlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkRhdGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZS5sbyBgdGVzdCAtZiAnQ0ZEYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGF0ZS5sbyBgdGVzdCAtZiAnQ0ZEYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGF0ZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRpY3Rpb25hcnkubG86IENGRGljdGlvbmFyeS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRpY3Rpb25hcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEaWN0aW9uYXJ5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGljdGlvbmFyeS5sbyBgdGVzdCAtZiAnQ0ZEaWN0aW9uYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGljdGlvbmFyeS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEaWN0aW9uYXJ5LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRpY3Rpb25hcnkuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZEaWN0aW9uYXJ5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRpY3Rpb25hcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGljdGlvbmFyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkRpY3Rpb25hcnkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEaWN0aW9uYXJ5LmxvIGB0ZXN0IC1mICdDRkRpY3Rpb25hcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZEaWN0aW9uYXJ5LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGljdGlvbmFyeS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZEaWN0aW9uYXJ5LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkRpY3Rpb25hcnkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGljdGlvbmFyeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGljdGlvbmFyeS5sbyBgdGVzdCAtZiAnQ0ZEaWN0aW9uYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGljdGlvbmFyeS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRGljdGlvbmFyeS5sbyBgdGVzdCAtZiAnQ0ZEaWN0aW9uYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRGljdGlvbmFyeS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkVycm9yLmxvOiBDRkVycm9yLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZFcnJvci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkVycm9yLmxvIGB0ZXN0IC1mICdDRkVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGRXJyb3IuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRXJyb3IuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRXJyb3IuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZFcnJvci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZFcnJvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZFcnJvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkVycm9yLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRXJyb3IubG8gYHRlc3QgLWYgJ0NGRXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZFcnJvci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkVycm9yLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkVycm9yLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRkVycm9yLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkVycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZFcnJvci5sbyBgdGVzdCAtZiAnQ0ZFcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkVycm9yLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZFcnJvci5sbyBgdGVzdCAtZiAnQ0ZFcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkVycm9yLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRmlsZVV0aWxpdGllcy5sbzogQ0ZGaWxlVXRpbGl0aWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRmlsZVV0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkZpbGVVdGlsaXRpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRkZpbGVVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZGaWxlVXRpbGl0aWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkZpbGVVdGlsaXRpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRmlsZVV0aWxpdGllcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkZpbGVVdGlsaXRpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRmlsZVV0aWxpdGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGRmlsZVV0aWxpdGllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkZpbGVVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGRmlsZVV0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkZpbGVVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZGaWxlVXRpbGl0aWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkZpbGVVdGlsaXRpZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGRmlsZVV0aWxpdGllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRkZpbGVVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZGaWxlVXRpbGl0aWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZGaWxlVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRkZpbGVVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZGaWxlVXRpbGl0aWVzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbzogQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZUlkZW50aWZpZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIGB0ZXN0IC1mICdDRkxvY2FsZUlkZW50aWZpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZUlkZW50aWZpZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlSWRlbnRpZmllci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkxvY2FsZUlkZW50aWZpZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlSWRlbnRpZmllci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlSWRlbnRpZmllci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZUlkZW50aWZpZXIubG8gYHRlc3QgLWYgJ0NGTG9jYWxlSWRlbnRpZmllci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZUlkZW50aWZpZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZUlkZW50aWZpZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTG9jYWxlSWRlbnRpZmllci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIGB0ZXN0IC1mICdDRkxvY2FsZUlkZW50aWZpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGVJZGVudGlmaWVyLmxvIGB0ZXN0IC1mICdDRkxvY2FsZUlkZW50aWZpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGVJZGVudGlmaWVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLmxvOiBDRkxvY2FsZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZS5sbyBgdGVzdCAtZiAnQ0ZMb2NhbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZMb2NhbGUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRkxvY2FsZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLmxvIGB0ZXN0IC1mICdDRkxvY2FsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZMb2NhbGUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTG9jYWxlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRkxvY2FsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLmxvIGB0ZXN0IC1mICdDRkxvY2FsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTG9jYWxlLmxvIGB0ZXN0IC1mICdDRkxvY2FsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRkxvY2FsZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1hY2hQb3J0LmxvOiBDRk1hY2hQb3J0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWFjaFBvcnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNYWNoUG9ydC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1hY2hQb3J0LmxvIGB0ZXN0IC1mICdDRk1hY2hQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWFjaFBvcnQuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWFjaFBvcnQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWFjaFBvcnQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZNYWNoUG9ydC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNYWNoUG9ydC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNYWNoUG9ydC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1hY2hQb3J0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWFjaFBvcnQubG8gYHRlc3QgLWYgJ0NGTWFjaFBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNYWNoUG9ydC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1hY2hQb3J0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1hY2hQb3J0LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRk1hY2hQb3J0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1hY2hQb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNYWNoUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNYWNoUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1hY2hQb3J0LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNYWNoUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNYWNoUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1hY2hQb3J0LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWVzc2FnZVBvcnQubG86IENGTWVzc2FnZVBvcnQuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNZXNzYWdlUG9ydC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1lc3NhZ2VQb3J0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWVzc2FnZVBvcnQubG8gYHRlc3QgLWYgJ0NGTWVzc2FnZVBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZNZXNzYWdlUG9ydC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNZXNzYWdlUG9ydC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNZXNzYWdlUG9ydC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRk1lc3NhZ2VQb3J0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1lc3NhZ2VQb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1lc3NhZ2VQb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWVzc2FnZVBvcnQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZNZXNzYWdlUG9ydC5sbyBgdGVzdCAtZiAnQ0ZNZXNzYWdlUG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk1lc3NhZ2VQb3J0LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWVzc2FnZVBvcnQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWVzc2FnZVBvcnQuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTWVzc2FnZVBvcnQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTWVzc2FnZVBvcnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1lc3NhZ2VQb3J0LmxvIGB0ZXN0IC1mICdDRk1lc3NhZ2VQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWVzc2FnZVBvcnQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk1lc3NhZ2VQb3J0LmxvIGB0ZXN0IC1mICdDRk1lc3NhZ2VQb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTWVzc2FnZVBvcnQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG86IENGTnVtYmVyRm9ybWF0dGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyRm9ybWF0dGVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvIGB0ZXN0IC1mICdDRk51bWJlckZvcm1hdHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlckZvcm1hdHRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyRm9ybWF0dGVyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGTnVtYmVyRm9ybWF0dGVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlckZvcm1hdHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGTnVtYmVyRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTnVtYmVyRm9ybWF0dGVyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyRm9ybWF0dGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlckZvcm1hdHRlci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZOdW1iZXJGb3JtYXR0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyRm9ybWF0dGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGTnVtYmVyRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTnVtYmVyRm9ybWF0dGVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXJGb3JtYXR0ZXIubG8gYHRlc3QgLWYgJ0NGTnVtYmVyRm9ybWF0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGTnVtYmVyRm9ybWF0dGVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLmxvOiBDRk51bWJlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlci5sbyBgdGVzdCAtZiAnQ0ZOdW1iZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZOdW1iZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRk51bWJlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZOdW1iZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGTnVtYmVyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRk51bWJlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGTnVtYmVyLmxvIGB0ZXN0IC1mICdDRk51bWJlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRk51bWJlci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsYXRmb3JtLmxvOiBDRlBsYXRmb3JtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGxhdGZvcm0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbGF0Zm9ybS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsYXRmb3JtLmxvIGB0ZXN0IC1mICdDRlBsYXRmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGxhdGZvcm0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGxhdGZvcm0uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGxhdGZvcm0uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZQbGF0Zm9ybS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbGF0Zm9ybS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbGF0Zm9ybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsYXRmb3JtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGxhdGZvcm0ubG8gYHRlc3QgLWYgJ0NGUGxhdGZvcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbGF0Zm9ybS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsYXRmb3JtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsYXRmb3JtLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlBsYXRmb3JtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsYXRmb3JtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbGF0Zm9ybS5sbyBgdGVzdCAtZiAnQ0ZQbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsYXRmb3JtLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbGF0Zm9ybS5sbyBgdGVzdCAtZiAnQ0ZQbGF0Zm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsYXRmb3JtLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG86IENGUGx1Z0luX0ZhY3RvcnkuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9GYWN0b3J5LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0ZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fRmFjdG9yeS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fRmFjdG9yeS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fRmFjdG9yeS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlBsdWdJbl9GYWN0b3J5LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9GYWN0b3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9GYWN0b3J5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0ZhY3RvcnkuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fRmFjdG9yeS5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fRmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9GYWN0b3J5LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0ZhY3RvcnkuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0ZhY3RvcnkuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUGx1Z0luX0ZhY3RvcnkuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0ZhY3RvcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9GYWN0b3J5LmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9GYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0ZhY3RvcnkuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9GYWN0b3J5LmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9GYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0ZhY3RvcnkuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG86IENGUGx1Z0luX0luc3RhbmNlLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0luc3RhbmNlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9JbnN0YW5jZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbl9JbnN0YW5jZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0luc3RhbmNlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGUGx1Z0luX0luc3RhbmNlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9JbnN0YW5jZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0luc3RhbmNlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9JbnN0YW5jZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZQbHVnSW5fSW5zdGFuY2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX0luc3RhbmNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fSW5zdGFuY2UubG8gYHRlc3QgLWYgJ0NGUGx1Z0luX0luc3RhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX0luc3RhbmNlLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLmxvOiBDRlBsdWdJbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW4uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlBsdWdJbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW4uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUGx1Z0luLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlBsdWdJbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9QbHVnSW4ubG86IENGUGx1Z0luX1BsdWdJbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9QbHVnSW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fUGx1Z0luLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX1BsdWdJbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fUGx1Z0luLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9QbHVnSW4uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZQbHVnSW5fUGx1Z0luLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9QbHVnSW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlBsdWdJbl9QbHVnSW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fUGx1Z0luLmxvIGB0ZXN0IC1mICdDRlBsdWdJbl9QbHVnSW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQbHVnSW5fUGx1Z0luLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX1BsdWdJbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQbHVnSW5fUGx1Z0luLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlBsdWdJbl9QbHVnSW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX1BsdWdJbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX1BsdWdJbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUGx1Z0luX1BsdWdJbi5sbyBgdGVzdCAtZiAnQ0ZQbHVnSW5fUGx1Z0luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUGx1Z0luX1BsdWdJbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByZWZlcmVuY2VzLmxvOiBDRlByZWZlcmVuY2VzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJlZmVyZW5jZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcmVmZXJlbmNlcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByZWZlcmVuY2VzLmxvIGB0ZXN0IC1mICdDRlByZWZlcmVuY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUHJlZmVyZW5jZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJlZmVyZW5jZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJlZmVyZW5jZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZQcmVmZXJlbmNlcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcmVmZXJlbmNlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcmVmZXJlbmNlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByZWZlcmVuY2VzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJlZmVyZW5jZXMubG8gYHRlc3QgLWYgJ0NGUHJlZmVyZW5jZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcmVmZXJlbmNlcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByZWZlcmVuY2VzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByZWZlcmVuY2VzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlByZWZlcmVuY2VzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByZWZlcmVuY2VzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZQcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByZWZlcmVuY2VzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcmVmZXJlbmNlcy5sbyBgdGVzdCAtZiAnQ0ZQcmVmZXJlbmNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByZWZlcmVuY2VzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LmxvOiBDRlByb3BlcnR5TGlzdC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByb3BlcnR5TGlzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByb3BlcnR5TGlzdC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByb3BlcnR5TGlzdC5sbyBgdGVzdCAtZiAnQ0ZQcm9wZXJ0eUxpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZQcm9wZXJ0eUxpc3QuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByb3BlcnR5TGlzdC5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlByb3BlcnR5TGlzdC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcm9wZXJ0eUxpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LmxvIGB0ZXN0IC1mICdDRlByb3BlcnR5TGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByb3BlcnR5TGlzdC5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByb3BlcnR5TGlzdC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZQcm9wZXJ0eUxpc3QuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGUHJvcGVydHlMaXN0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlByb3BlcnR5TGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LmxvIGB0ZXN0IC1mICdDRlByb3BlcnR5TGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByb3BlcnR5TGlzdC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUHJvcGVydHlMaXN0LmxvIGB0ZXN0IC1mICdDRlByb3BlcnR5TGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlByb3BlcnR5TGlzdC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bkxvb3AubG86IENGUnVuTG9vcC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bkxvb3AubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW5Mb29wLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVuTG9vcC5sbyBgdGVzdCAtZiAnQ0ZSdW5Mb29wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVuTG9vcC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW5Mb29wLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bkxvb3AuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZSdW5Mb29wLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bkxvb3AubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVuTG9vcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bkxvb3AuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW5Mb29wLmxvIGB0ZXN0IC1mICdDRlJ1bkxvb3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW5Mb29wLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVuTG9vcC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW5Mb29wLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlJ1bkxvb3AuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVuTG9vcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVuTG9vcC5sbyBgdGVzdCAtZiAnQ0ZSdW5Mb29wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVuTG9vcC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVuTG9vcC5sbyBgdGVzdCAtZiAnQ0ZSdW5Mb29wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVuTG9vcC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bnRpbWUubG86IENGUnVudGltZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bnRpbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW50aW1lLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVudGltZS5sbyBgdGVzdCAtZiAnQ0ZSdW50aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVudGltZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW50aW1lLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bnRpbWUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZSdW50aW1lLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bnRpbWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVudGltZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlJ1bnRpbWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW50aW1lLmxvIGB0ZXN0IC1mICdDRlJ1bnRpbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZSdW50aW1lLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVudGltZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZSdW50aW1lLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlJ1bnRpbWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVudGltZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVudGltZS5sbyBgdGVzdCAtZiAnQ0ZSdW50aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVudGltZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGUnVudGltZS5sbyBgdGVzdCAtZiAnQ0ZSdW50aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGUnVudGltZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5sbzogQ0ZTZXQuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTZXQubG8gYHRlc3QgLWYgJ0NGU2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTZXQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5sbyBgdGVzdCAtZiAnQ0ZTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTZXQuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU2V0LlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlNldC5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTZXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5sbyBgdGVzdCAtZiAnQ0ZTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTZXQuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNldC5sbyBgdGVzdCAtZiAnQ0ZTZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTZXQuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQubG86IENGU29ja2V0LmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0LlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0LmxvIGB0ZXN0IC1mICdDRlNvY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0LlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU29ja2V0LmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQubG8gYHRlc3QgLWYgJ0NGU29ja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ja2V0LmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0LlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTb2NrZXQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQubG8gYHRlc3QgLWYgJ0NGU29ja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ja2V0LmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXQubG8gYHRlc3QgLWYgJ0NGU29ja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ja2V0LmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLmxvOiBDRlNvY2tldFN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldFN0cmVhbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldFN0cmVhbS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTb2NrZXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb2NrZXRTdHJlYW0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldFN0cmVhbS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlNvY2tldFN0cmVhbS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXRTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldFN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb2NrZXRTdHJlYW0uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU29ja2V0U3RyZWFtLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvY2tldFN0cmVhbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ja2V0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlNvY2tldFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlNvY2tldFN0cmVhbS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvcnRGdW5jdGlvbnMubG86IENGU29ydEZ1bmN0aW9ucy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvcnRGdW5jdGlvbnMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb3J0RnVuY3Rpb25zLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyBgdGVzdCAtZiAnQ0ZTb3J0RnVuY3Rpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ydEZ1bmN0aW9ucy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb3J0RnVuY3Rpb25zLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvcnRGdW5jdGlvbnMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTb3J0RnVuY3Rpb25zLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvcnRGdW5jdGlvbnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlNvcnRGdW5jdGlvbnMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb3J0RnVuY3Rpb25zLmxvIGB0ZXN0IC1mICdDRlNvcnRGdW5jdGlvbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTb3J0RnVuY3Rpb25zLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ydEZ1bmN0aW9ucy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTb3J0RnVuY3Rpb25zLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlNvcnRGdW5jdGlvbnMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ydEZ1bmN0aW9ucy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyBgdGVzdCAtZiAnQ0ZTb3J0RnVuY3Rpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ydEZ1bmN0aW9ucy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU29ydEZ1bmN0aW9ucy5sbyBgdGVzdCAtZiAnQ0ZTb3J0RnVuY3Rpb25zLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU29ydEZ1bmN0aW9ucy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0b3JhZ2UubG86IENGU3RvcmFnZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0b3JhZ2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdG9yYWdlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RvcmFnZS5sbyBgdGVzdCAtZiAnQ0ZTdG9yYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RvcmFnZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdG9yYWdlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0b3JhZ2UuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTdG9yYWdlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0b3JhZ2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RvcmFnZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0b3JhZ2UuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdG9yYWdlLmxvIGB0ZXN0IC1mICdDRlN0b3JhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdG9yYWdlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RvcmFnZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdG9yYWdlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0b3JhZ2UuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RvcmFnZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RvcmFnZS5sbyBgdGVzdCAtZiAnQ0ZTdG9yYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RvcmFnZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RvcmFnZS5sbyBgdGVzdCAtZiAnQ0ZTdG9yYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RvcmFnZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5sbzogQ0ZTdHJlYW0uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGU3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyZWFtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJlYW0uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyZWFtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJlYW0uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyZWFtLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmVhbS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJlYW0uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbzogQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ0VuY29kaW5nQ29udmVydGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdDb252ZXJ0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ0NvbnZlcnRlci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbzogQ0ZTdHJpbmdFbmNvZGluZ3MuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8gYHRlc3QgLWYgJ0NGU3RyaW5nRW5jb2RpbmdzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nRW5jb2RpbmdzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTdHJpbmdFbmNvZGluZ3MuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ3MuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nRW5jb2RpbmdzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN0cmluZ0VuY29kaW5ncy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdFbmNvZGluZ3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ3MuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ0VuY29kaW5ncy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdFbmNvZGluZ3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdFbmNvZGluZ3MuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcubG86IENGU3RyaW5nLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nLmxvIGB0ZXN0IC1mICdDRlN0cmluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGU3RyaW5nLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZy5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZTdHJpbmcuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmcubG8gYHRlc3QgLWYgJ0NGU3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3RyaW5nLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nU2Nhbm5lci5sbzogQ0ZTdHJpbmdTY2FubmVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nU2Nhbm5lci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1NjYW5uZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1NjYW5uZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdTY2FubmVyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1NjYW5uZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nU2Nhbm5lci5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlN0cmluZ1NjYW5uZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nU2Nhbm5lci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nU2Nhbm5lci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1NjYW5uZXIubG8gYHRlc3QgLWYgJ0NGU3RyaW5nU2Nhbm5lci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1NjYW5uZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdTY2FubmVyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1NjYW5uZXIuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU3RyaW5nU2Nhbm5lci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1NjYW5uZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdTY2FubmVyLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdTY2FubmVyLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1NjYW5uZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdTY2FubmVyLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvOiBDRlN0cmluZ1V0aWxpdGllcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1V0aWxpdGllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZTdHJpbmdVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTdHJpbmdVdGlsaXRpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1V0aWxpdGllcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlN0cmluZ1V0aWxpdGllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1V0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1V0aWxpdGllcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1V0aWxpdGllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTdHJpbmdVdGlsaXRpZXMuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGU3RyaW5nVXRpbGl0aWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN0cmluZ1V0aWxpdGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1V0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1V0aWxpdGllcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3RyaW5nVXRpbGl0aWVzLmxvIGB0ZXN0IC1mICdDRlN0cmluZ1V0aWxpdGllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN0cmluZ1V0aWxpdGllcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvOiBDRlN5c3RlbURpcmVjdG9yaWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvIGB0ZXN0IC1mICdDRlN5c3RlbURpcmVjdG9yaWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGU3lzdGVtRGlyZWN0b3JpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGU3lzdGVtRGlyZWN0b3JpZXMubG8gYHRlc3QgLWYgJ0NGU3lzdGVtRGlyZWN0b3JpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlN5c3RlbURpcmVjdG9yaWVzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlN5c3RlbURpcmVjdG9yaWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyBgdGVzdCAtZiAnQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN5c3RlbURpcmVjdG9yaWVzLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5sbyBgdGVzdCAtZiAnQ0ZTeXN0ZW1EaXJlY3Rvcmllcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlN5c3RlbURpcmVjdG9yaWVzLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVGltZVpvbmUubG86IENGVGltZVpvbmUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUaW1lWm9uZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRpbWVab25lLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVGltZVpvbmUubG8gYHRlc3QgLWYgJ0NGVGltZVpvbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZUaW1lWm9uZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUaW1lWm9uZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUaW1lWm9uZS5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlRpbWVab25lLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRpbWVab25lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRpbWVab25lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVGltZVpvbmUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUaW1lWm9uZS5sbyBgdGVzdCAtZiAnQ0ZUaW1lWm9uZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRpbWVab25lLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVGltZVpvbmUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVGltZVpvbmUuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVGltZVpvbmUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVGltZVpvbmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRpbWVab25lLmxvIGB0ZXN0IC1mICdDRlRpbWVab25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVGltZVpvbmUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRpbWVab25lLmxvIGB0ZXN0IC1mICdDRlRpbWVab25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVGltZVpvbmUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUcmVlLmxvOiBDRlRyZWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUcmVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVHJlZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRyZWUubG8gYHRlc3QgLWYgJ0NGVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRyZWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVHJlZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUcmVlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVHJlZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUcmVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRyZWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZUcmVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVHJlZS5sbyBgdGVzdCAtZiAnQ0ZUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVHJlZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRyZWUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVHJlZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZUcmVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRyZWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRyZWUubG8gYHRlc3QgLWYgJ0NGVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRyZWUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlRyZWUubG8gYHRlc3QgLWYgJ0NGVHJlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlRyZWUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwubG86IENGVVJMLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMLmxvIGB0ZXN0IC1mICdDRlVSTC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVVJMLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTC5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZVUkwuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkwubG8gYHRlc3QgLWYgJ0NGVVJMLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVJMLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLmxvOiBDRlVSTEFjY2Vzcy5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTEFjY2Vzcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTEFjY2Vzcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTEFjY2Vzcy5sbyBgdGVzdCAtZiAnQ0ZVUkxBY2Nlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVUkxBY2Nlc3MuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTEFjY2Vzcy5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlVSTEFjY2Vzcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkxBY2Nlc3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLmxvIGB0ZXN0IC1mICdDRlVSTEFjY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTEFjY2Vzcy5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTEFjY2Vzcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVUkxBY2Nlc3MuUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVVJMQWNjZXNzLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVSTEFjY2Vzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLmxvIGB0ZXN0IC1mICdDRlVSTEFjY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTEFjY2Vzcy5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVJMQWNjZXNzLmxvIGB0ZXN0IC1mICdDRlVSTEFjY2Vzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVSTEFjY2Vzcy5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVVSUQubG86IENGVVVJRC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVVSUQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVVUlELlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVVJRC5sbyBgdGVzdCAtZiAnQ0ZVVUlELmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVVJRC5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVVUlELlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVVSUQuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVVUlELmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVVSUQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVVJRC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVVSUQuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVVUlELmxvIGB0ZXN0IC1mICdDRlVVSUQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVVUlELmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVVJRC5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVVUlELlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVVSUQuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVVJRC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVVJRC5sbyBgdGVzdCAtZiAnQ0ZVVUlELmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVVJRC5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVVVJRC5sbyBgdGVzdCAtZiAnQ0ZVVUlELmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVVVJRC5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaUNoYXIubG86IENGVW5pQ2hhci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaUNoYXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmlDaGFyLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pQ2hhci5sbyBgdGVzdCAtZiAnQ0ZVbmlDaGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pQ2hhci5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmlDaGFyLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaUNoYXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVbmlDaGFyLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaUNoYXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pQ2hhci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaUNoYXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmlDaGFyLmxvIGB0ZXN0IC1mICdDRlVuaUNoYXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmlDaGFyLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pQ2hhci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmlDaGFyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVuaUNoYXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pQ2hhci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pQ2hhci5sbyBgdGVzdCAtZiAnQ0ZVbmlDaGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pQ2hhci5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pQ2hhci5sbyBgdGVzdCAtZiAnQ0ZVbmlDaGFyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pQ2hhci5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvOiBDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVW5pY29kZURlY29tcG9zaXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZURlY29tcG9zaXRpb24ubG8gYHRlc3QgLWYgJ0NGVW5pY29kZURlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlRGVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVEZWNvbXBvc2l0aW9uLmMKKyAKKyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvOiBDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVbmljb2RlUHJlY29tcG9zaXRpb24uUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J0NGVW5pY29kZVByZWNvbXBvc2l0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVW5pY29kZVByZWNvbXBvc2l0aW9uLmxvIGB0ZXN0IC1mICdDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlVuaWNvZGVQcmVjb21wb3NpdGlvbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVzZXJOb3RpZmljYXRpb24ubG86IENGVXNlck5vdGlmaWNhdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXNlck5vdGlmaWNhdGlvbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVzZXJOb3RpZmljYXRpb24uUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVzZXJOb3RpZmljYXRpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlVzZXJOb3RpZmljYXRpb24uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLmxvIGB0ZXN0IC1mICdDRlVzZXJOb3RpZmljYXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVc2VyTm90aWZpY2F0aW9uLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVc2VyTm90aWZpY2F0aW9uLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlVzZXJOb3RpZmljYXRpb24uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXNlck5vdGlmaWNhdGlvbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXNlck5vdGlmaWNhdGlvbi5sbyBgdGVzdCAtZiAnQ0ZVc2VyTm90aWZpY2F0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXNlck5vdGlmaWNhdGlvbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5sbzogQ0ZVdGlsaXRpZXMuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVdGlsaXRpZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVdGlsaXRpZXMuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVdGlsaXRpZXMubG8gYHRlc3QgLWYgJ0NGVXRpbGl0aWVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVXRpbGl0aWVzLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVdGlsaXRpZXMuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZVdGlsaXRpZXMuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXRpbGl0aWVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVdGlsaXRpZXMuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVXRpbGl0aWVzLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlV0aWxpdGllcy5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZVdGlsaXRpZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVdGlsaXRpZXMuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlV0aWxpdGllcy5sbyBgdGVzdCAtZiAnQ0ZVdGlsaXRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZVdGlsaXRpZXMuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZWZXJzaW9uLmxvOiBDRlZlcnNpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZWZXJzaW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVmVyc2lvbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlZlcnNpb24ubG8gYHRlc3QgLWYgJ0NGVmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlZlcnNpb24uYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVmVyc2lvbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZWZXJzaW9uLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGVmVyc2lvbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZWZXJzaW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlZlcnNpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZWZXJzaW9uLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVmVyc2lvbi5sbyBgdGVzdCAtZiAnQ0ZWZXJzaW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGVmVyc2lvbi5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlZlcnNpb24uVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGVmVyc2lvbi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZWZXJzaW9uLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlZlcnNpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlZlcnNpb24ubG8gYHRlc3QgLWYgJ0NGVmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlZlcnNpb24uYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlZlcnNpb24ubG8gYHRlc3QgLWYgJ0NGVmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlZlcnNpb24uYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvOiBDRldpbmRvd3NNZXNzYWdlUXVldWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gYHRlc3QgLWYgJ0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRldpbmRvd3NNZXNzYWdlUXVldWUuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5sbyBgdGVzdCAtZiAnQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGV2luZG93c01lc3NhZ2VRdWV1ZS5jCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGV2luZG93c01lc3NhZ2VRdWV1ZS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZXaW5kb3dzTWVzc2FnZVF1ZXVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gYHRlc3QgLWYgJ0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRldpbmRvd3NNZXNzYWdlUXVldWUuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRldpbmRvd3NNZXNzYWdlUXVldWUubG8gYHRlc3QgLWYgJ0NGV2luZG93c01lc3NhZ2VRdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRldpbmRvd3NNZXNzYWdlUXVldWUuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbzogQ0ZYTUxJbnB1dFN0cmVhbS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTElucHV0U3RyZWFtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MSW5wdXRTdHJlYW0uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbyBgdGVzdCAtZiAnQ0ZYTUxJbnB1dFN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTElucHV0U3RyZWFtLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTElucHV0U3RyZWFtLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTElucHV0U3RyZWFtLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MSW5wdXRTdHJlYW0uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTElucHV0U3RyZWFtLmxvIGB0ZXN0IC1mICdDRlhNTElucHV0U3RyZWFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MSW5wdXRTdHJlYW0uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZYTUxJbnB1dFN0cmVhbS5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxJbnB1dFN0cmVhbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGWE1MSW5wdXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxJbnB1dFN0cmVhbS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MSW5wdXRTdHJlYW0ubG8gYHRlc3QgLWYgJ0NGWE1MSW5wdXRTdHJlYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxJbnB1dFN0cmVhbS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTE5vZGUubG86IENGWE1MTm9kZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTE5vZGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxOb2RlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MTm9kZS5sbyBgdGVzdCAtZiAnQ0ZYTUxOb2RlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MTm9kZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxOb2RlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTE5vZGUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZYTUxOb2RlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTE5vZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MTm9kZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTE5vZGUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxOb2RlLmxvIGB0ZXN0IC1mICdDRlhNTE5vZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxOb2RlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MTm9kZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxOb2RlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTE5vZGUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MTm9kZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MTm9kZS5sbyBgdGVzdCAtZiAnQ0ZYTUxOb2RlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MTm9kZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MTm9kZS5sbyBgdGVzdCAtZiAnQ0ZYTUxOb2RlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MTm9kZS5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5sbzogQ0ZYTUxQYXJzZXIuYworLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQYXJzZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQYXJzZXIuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQYXJzZXIubG8gYHRlc3QgLWYgJ0NGWE1MUGFyc2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MUGFyc2VyLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQYXJzZXIuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZYTUxQYXJzZXIuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUGFyc2VyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQYXJzZXIuVHBvICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUGFyc2VyLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTFBhcnNlci5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQYXJzZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFBhcnNlci5sbyBgdGVzdCAtZiAnQ0ZYTUxQYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQYXJzZXIuYworIAorIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbzogQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4uVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbyBgdGVzdCAtZiAnQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5UcG8gLWMgLW8gbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFByZWZlcmVuY2VzRG9tYWluLmxvIGB0ZXN0IC1mICdDRlhNTFByZWZlcmVuY2VzRG9tYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MUHJlZmVyZW5jZXNEb21haW4uYworK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jJyBvYmplY3Q9J2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gYHRlc3QgLWYgJ0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MUHJlZmVyZW5jZXNEb21haW4ubG8gYHRlc3QgLWYgJ0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCisgCisgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFRyZWUubG86IENGWE1MVHJlZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFRyZWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxUcmVlLlRwbyAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5sbyBgdGVzdCAtZiAnQ0ZYTUxUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MVHJlZS5jCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxUcmVlLlRwbyAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFRyZWUuUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nQ0ZYTUxUcmVlLmMnIG9iamVjdD0nbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFRyZWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYS1DRlhNTFRyZWUuVHBvIC1jIC1vIGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxUcmVlLmxvIGB0ZXN0IC1mICdDRlhNTFRyZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgQ0ZYTUxUcmVlLmMKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5UcG8gJChERVBESVIpL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGEtQ0ZYTUxUcmVlLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdDRlhNTFRyZWUuYycgb2JqZWN0PSdsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5sbyBgdGVzdCAtZiAnQ0ZYTUxUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MVHJlZS5jCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliQ29yZUZvdW5kYXRpb25fcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJDb3JlRm91bmRhdGlvbl9wcm9maWxlX2xhLUNGWE1MVHJlZS5sbyBgdGVzdCAtZiAnQ0ZYTUxUcmVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYENGWE1MVHJlZS5jCisgCisgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyAJLXJtIC1mICoubG8KK0BAIC0yNDc4LDc2ICsyNjUyLDkxIEBAIGNsZWFuLWxpYnRvb2w6CisgCS1ybSAtcmYgLmxpYnMgX2xpYnMKKyAKKyBkaXN0Y2xlYW4tbGlidG9vbDoKKy0JLXJtIC1mIGxpYnRvb2wKKysJLXJtIC1mIGxpYnRvb2wgY29uZmlnLmx0CisgaW5zdGFsbC1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQTogJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhX0RBVEEpCisgCUAkKE5PUk1BTF9JTlNUQUxMKQorLQl0ZXN0IC16ICIkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKSIKKy0JQGxpc3Q9JyQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YV9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorKwlAbGlzdD0nJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhX0RBVEEpJzsgdGVzdCAtbiAiJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKSIgfHwgbGlzdD07IFwKKysJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisrCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFkaXIpJyI7IFwKKysJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisrCWZpOyBcCisrCWZvciBwIGluICQkbGlzdDsgZG8gXAorIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCistCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKy0JICBlY2hvICIgJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQV9JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNURElSKSQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcikvJCRmJyI7IFwKKy0JICAkKGxpYkNvcmVGb3VuZGF0aW9uX2xhX2RhdGFEQVRBX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKS8kJGYiOyBcCisrCSAgZWNobyAiJCRkJCRwIjsgXAorKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKysJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpciknIjsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKSIgfHwgZXhpdCAkJD87IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbC1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQToKKyAJQCQoTk9STUFMX1VOSU5TVEFMTCkKKy0JQGxpc3Q9JyQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YV9EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCistCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKS8kJGYnIjsgXAorLQkgIHJtIC1mICIkKERFU1RESVIpJChsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyKS8kJGYiOyBcCistCWRvbmUKKysJQGxpc3Q9JyQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YV9EQVRBKSc7IHRlc3QgLW4gIiQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcikiIHx8IGxpc3Q9OyBcCisrCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisrCWRpcj0nJChERVNURElSKSQobGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisgaW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQorIAlAJChOT1JNQUxfSU5TVEFMTCkKKy0JdGVzdCAteiAiJChwa2djb25maWdkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIgorLQlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKysJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKysJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCisrCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAxOyBcCisrCWZpOyBcCisrCWZvciBwIGluICQkbGlzdDsgZG8gXAorIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCistCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKy0JICBlY2hvICIgJChwa2djb25maWdEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiciOyBcCistCSAgJChwa2djb25maWdEQVRBX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiI7IFwKKysJICBlY2hvICIkJGQkJHAiOyBcCisrCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisrCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyI7IFwKKysJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAkJD87IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbC1wa2djb25maWdEQVRBOgorIAlAJChOT1JNQUxfVU5JTlNUQUxMKQorLQlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKy0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kJGYnIjsgXAorLQkgIHJtIC1mICIkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiI7IFwKKy0JZG9uZQorKwlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2NvbmZpZ2RpcikiIHx8IGxpc3Q9OyBcCisrCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisrCWRpcj0nJChERVNURElSKSQocGtnY29uZmlnZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKyBpbnN0YWxsLUNGX2luY2x1ZGVIRUFERVJTOiAkKENGX2luY2x1ZGVfSEVBREVSUykKKyAJQCQoTk9STUFMX0lOU1RBTEwpCistCXRlc3QgLXogIiQoQ0ZfaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKENGX2luY2x1ZGVkaXIpIgorLQlAbGlzdD0nJChDRl9pbmNsdWRlX0hFQURFUlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisrCUBsaXN0PSckKENGX2luY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKENGX2luY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKysJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoQ0ZfaW5jbHVkZWRpciknIjsgXAorKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKENGX2luY2x1ZGVkaXIpIiB8fCBleGl0IDE7IFwKKysJZmk7IFwKKysJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisgCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKy0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorLQkgIGVjaG8gIiAkKENGX2luY2x1ZGVIRUFERVJTX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChDRl9pbmNsdWRlZGlyKS8kJGYnIjsgXAorLQkgICQoQ0ZfaW5jbHVkZUhFQURFUlNfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKENGX2luY2x1ZGVkaXIpLyQkZiI7IFwKKysJICBlY2hvICIkJGQkJHAiOyBcCisrCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisrCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKENGX2luY2x1ZGVkaXIpJyI7IFwKKysJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChDRl9pbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbC1DRl9pbmNsdWRlSEVBREVSUzoKKyAJQCQoTk9STUFMX1VOSU5TVEFMTCkKKy0JQGxpc3Q9JyQoQ0ZfaW5jbHVkZV9IRUFERVJTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCistCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChDRl9pbmNsdWRlZGlyKS8kJGYnIjsgXAorLQkgIHJtIC1mICIkKERFU1RESVIpJChDRl9pbmNsdWRlZGlyKS8kJGYiOyBcCistCWRvbmUKKysJQGxpc3Q9JyQoQ0ZfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoQ0ZfaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisrCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisrCWRpcj0nJChERVNURElSKSQoQ0ZfaW5jbHVkZWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisgCisgIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKy0jIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKy0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCistIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCistIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKy0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorLSQoUkVDVVJTSVZFX1RBUkdFVFMpOgorLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAorLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCistCSAgY2FzZSAkJGYgaW4gXAorLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCistCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKy0JICBlc2FjOyBcCistCWRvbmU7IFwKKysjIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKysjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mICdtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisrIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCisrIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKKysjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgorKyQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKKysJQGZhaWw9OyBcCisrCWlmICQoYW1fX21ha2Vfa2VlcGdvaW5nKTsgdGhlbiBcCisrCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCisrCWVsc2UgXAorKwkgIGZhaWxjb209J2V4aXQgMSc7IFwKKysJZmk7IFwKKyAJZG90X3NlZW49bm87IFwKKyAJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKysJY2FzZSAiJEAiIGluIFwKKysJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisrCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorKwllc2FjOyBcCisrCWZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisgCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisgCSAgICBkb3Rfc2Vlbj15ZXM7IFwKK0BAIC0yNTU1LDY1ICsyNzQ0LDIwIEBAICQoUkVDVVJTSVZFX1RBUkdFVFMpOgorIAkgIGVsc2UgXAorIAkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKyAJICBmaTsgXAorLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKyAJICB8fCBldmFsICQkZmFpbGNvbTsgXAorIAlkb25lOyBcCisgCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisgCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKyAJZmk7IHRlc3QgLXogIiQkZmFpbCIKKyAKKy0kKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKy0JQGZhaWxjb209J2V4aXQgMSc7IFwKKy0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorLQkgIGNhc2UgJCRmIGluIFwKKy0JICAgICo9KiB8IC0tWyFrXSopOzsgXAorLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCistCSAgZXNhYzsgXAorLQlkb25lOyBcCistCWRvdF9zZWVuPW5vOyBcCistCWNhc2UgIiRAIiBpbiBcCistCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKy0JZXNhYzsgXAorLQlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCistCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorLQkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKy0JICBmaTsgXAorLQlkb25lOyBcCistCXJldj0iJCRyZXYgLiI7IFwKKy0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorLQlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCistCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCistCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorLQkgIGVsc2UgXAorLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKy0JICBmaTsgXAorLQkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCistCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgorLXRhZ3MtcmVjdXJzaXZlOgorLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKy0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorLQlkb25lCistY3RhZ3MtcmVjdXJzaXZlOgorLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKy0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKy0JZG9uZQorK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQorK3RhZ3M6IHRhZ3MtcmVjdXJzaXZlCisrVEFHUzogdGFncworIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJc2V0IHg7IFwKKyAJaGVyZT1gcHdkYDsgXAorIAlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKyAJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKK0BAIC0yNjI1LDQ1ICsyNzY5LDYzIEBAIFRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorIAlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKyAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorIAkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorLQkgICAgICB0YWdzPSIkJHRhZ3MgJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKysJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorIAkgIGZpOyBcCisgCWRvbmU7IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJc2hpZnQ7IFwKKysJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKyAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCistCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisrCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorKwkgIGVsc2UgXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAkJHVuaXF1ZTsgXAorKwkgIGZpOyBcCisgCWZpCistY3RhZ3M6IENUQUdTCistQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisrY3RhZ3M6IGN0YWdzLXJlY3Vyc2l2ZQorKworK0NUQUdTOiBjdGFncworK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisgCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorKwkgICAgICQkdW5pcXVlCisgCisgR1RBR1M6CisgCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCistCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKysJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisrCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorK2NzY29wZTogY3Njb3BlLmZpbGVzCisrCXRlc3QgISAtcyBjc2NvcGUuZmlsZXMgXAorKwkgIHx8ICQoQ1NDT1BFKSAtYiAtcSAkKEFNX0NTQ09QRUZMQUdTKSAkKENTQ09QRUZMQUdTKSAtaSBjc2NvcGUuZmlsZXMgJChDU0NPUEVfQVJHUykKKytjbGVhbi1jc2NvcGU6CisrCS1ybSAtZiBjc2NvcGUuZmlsZXMKKytjc2NvcGUuZmlsZXM6IGNsZWFuLWNzY29wZSBjc2NvcGVsaXN0CisrY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisrCS1ybSAtZiBjc2NvcGUub3V0IGNzY29wZS5pbi5vdXQgY3Njb3BlLnBvLm91dCBjc2NvcGUuZmlsZXMKKyAKKyBkaXN0ZGlyOiAkKERJU1RGSUxFUykKKyAJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCistCXRlc3QgLWQgJChkaXN0ZGlyKSB8fCBta2RpciAkKGRpc3RkaXIpCisrCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgorIAlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisgCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKyAJbGlzdD0nJChESVNURklMRVMpJzsgXAorQEAgLTI2NzksNjYgKzI4NDEsOTAgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCistCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisrCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCistCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCistCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCistCSAgICB8fCBleGl0IDE7IFwKKy0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKy0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorLQkgICAgKGNkICQkc3ViZGlyICYmIFwKKysJICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCisrCSAgICAgIHx8IHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKysJICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorKwkgICAgICB8fCBleGl0IDE7IFwKKysJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisrCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKysJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKysJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisgCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKy0JICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKyAJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKyAJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKysJCWFtX19za2lwX21vZGVfZml4PTogXAorIAkgICAgICAgIGRpc3RkaXIpIFwKKyAJICAgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKKyAJZG9uZQorLQktZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtNzc3IC1leGVjIGNobW9kIGErcnd4IHt9IFw7IC1vIFwKKysJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisrCXx8IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtNzU1IFwKKysJCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKKyAJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisgCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorIAkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAorLQl8fCBjaG1vZCAtUiBhK3IgJChkaXN0ZGlyKQorKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCisgZGlzdC1nemlwOiBkaXN0ZGlyCisgCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CistCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorIAorIGRpc3QtYnppcDI6IGRpc3RkaXIKKy0JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKKy0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisrCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBCWklQMj0kJHtCWklQMi0tOX0gYnppcDIgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorIAorLWRpc3QtbHptYTogZGlzdGRpcgorLQl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHptYSAtOSAtYyA+JChkaXN0ZGlyKS50YXIubHptYQorLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKKytkaXN0LWx6aXA6IGRpc3RkaXIKKysJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6aXAgLWMgJCR7TFpJUF9PUFQtLTl9ID4kKGRpc3RkaXIpLnRhci5segorKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorKworK2Rpc3QteHo6IGRpc3RkaXIKKysJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IFhaX09QVD0kJHtYWl9PUFQtLWV9IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorIAorIGRpc3QtdGFyWjogZGlzdGRpcgorKwlAZWNobyBXQVJOSU5HOiAiU3VwcG9ydCBmb3Igc2hhciBkaXN0cmlidXRpb24gYXJjaGl2ZXMgaXMiIFwKKysJICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQuIiA+JjIKKysJQGVjaG8gV0FSTklORzogIkl0IHdpbGwgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIEF1dG9tYWtlIDIuMCIgPiYyCisgCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgorLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKKysJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKyAKKyBkaXN0LXNoYXI6IGRpc3RkaXIKKysJQGVjaG8gV0FSTklORzogIlN1cHBvcnQgZm9yIGRpc3RyaWJ1dGlvbiBhcmNoaXZlcyBjb21wcmVzc2VkIHdpdGgiIFwKKysJCSAgICAgICAibGVnYWN5IHByb2dyYW0gJ2NvbXByZXNzJyBpcyBkZXByZWNhdGVkLiIgPiYyCisrCUBlY2hvIFdBUk5JTkc6ICJJdCB3aWxsIGJlIHJlbW92ZWQgYWx0b2dldGhlciBpbiBBdXRvbWFrZSAyLjAiID4mMgorIAlzaGFyICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikuc2hhci5negorLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKKysJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKyAKKyBkaXN0LXppcDogZGlzdGRpcgorIAktcm0gLWYgJChkaXN0ZGlyKS56aXAKKyAJemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCistCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorIAorLWRpc3QgZGlzdC1hbGw6IGRpc3RkaXIKKy0JdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKy0JJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisrZGlzdCBkaXN0LWFsbDoKKysJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKKysJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKyAKKyAjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisgIyBpdCBndWFyYW50ZWVzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzZWxmLWNvbnRhaW5lZCBieSBtYWtpbmcgYW5vdGhlcgorQEAgLTI3NDYsMjcgKzI5MzIsMzMgQEAgZGlzdCBkaXN0LWFsbDogZGlzdGRpcgorIGRpc3RjaGVjazogZGlzdAorIAljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCisgCSoudGFyLmd6KikgXAorLQkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAorKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisgCSoudGFyLmJ6MiopIFwKKy0JICBidW56aXAyIC1jICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKy0JKi50YXIubHptYSopIFwKKy0JICB1bmx6bWEgLWMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKysJICBiemlwMiAtZGMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAorKwkqLnRhci5seiopIFwKKysJICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKKysJKi50YXIueHoqKSBcCisrCSAgeHogLWRjICQoZGlzdGRpcikudGFyLnh6IHwgJChhbV9fdW50YXIpIDs7XAorIAkqLnRhci5aKikgXAorIAkgIHVuY29tcHJlc3MgLWMgJChkaXN0ZGlyKS50YXIuWiB8ICQoYW1fX3VudGFyKSA7O1wKKyAJKi5zaGFyLmd6KikgXAorLQkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikuc2hhci5neiB8IHVuc2hhciA7O1wKKysJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikuc2hhci5neiB8IHVuc2hhciA7O1wKKyAJKi56aXAqKSBcCisgCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCisgCWVzYWMKKy0JY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIGErdyAkKGRpc3RkaXIpCistCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCistCW1rZGlyICQoZGlzdGRpcikvX2luc3QKKysJY2htb2QgLVIgYS13ICQoZGlzdGRpcikKKysJY2htb2QgdSt3ICQoZGlzdGRpcikKKysJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQgJChkaXN0ZGlyKS9faW5zdAorIAljaG1vZCBhLXcgJChkaXN0ZGlyKQorKwl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAorIAlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKyAJICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKKy0JICAmJiBjZCAkKGRpc3RkaXIpL19idWlsZCBcCistCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAorKwkgICYmIGFtX19jd2Q9YHB3ZGAgXAorKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCisrCSAgJiYgLi4vY29uZmlndXJlIFwKKysJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorIAkgICAgJChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSBcCisrCSAgICAtLXNyY2Rpcj0uLiAtLXByZWZpeD0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKyAJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisgCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZHZpIFwKKyAJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCitAQCAtMjc4NiwxNCArMjk3OCwyNCBAQCBkaXN0Y2hlY2s6IGRpc3QKKyAJICAmJiBybSAtcmYgIiQkZGNfZGVzdGRpciIgXAorIAkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorIAkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKKy0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjaworLQkkKGFtX19yZW1vdmVfZGlzdGRpcikKKysJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisrCSAgJiYgY2QgIiQkYW1fX2N3ZCIgXAorKwkgIHx8IGV4aXQgMQorKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorIAlAKGVjaG8gIiQoZGlzdGRpcikgYXJjaGl2ZXMgcmVhZHkgZm9yIGRpc3RyaWJ1dGlvbjogIjsgXAorIAkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKyAJICBzZWQgLWUgMWggLWUgMXMvLi89L2cgLWUgMXAgLWUgMXggLWUgJyQkcCcgLWUgJyQkeCcKKyBkaXN0dW5pbnN0YWxsY2hlY2s6CistCUBjZCAkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpIFwKKy0JJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCisrCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKysJICBlY2hvICdFUlJPUjogdHJ5aW5nIHRvIHJ1biAkQCB3aXRoIGFuIGVtcHR5JyBcCisrCSAgICAgICAnJCQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorKwkgIGV4aXQgMTsgXAorKwl9OyBcCisrCSQoYW1fX2NkKSAnJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKScgfHwgeyBcCisrCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorKwkgIGV4aXQgMTsgXAorKwl9OyBcCisrCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKyAJICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKKyAJICAgICAgICBpZiB0ZXN0IC1uICIkKERFU1RESVIpIjsgdGhlbiBcCisgCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorQEAgLTI4MjcsMTYgKzMwMjksMjIgQEAgaW5zdGFsbC1hbTogYWxsLWFtCisgCisgaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCisgaW5zdGFsbC1zdHJpcDoKKy0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKy0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKy0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisrCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgICBpbnN0YWxsOyBcCisrCWVsc2UgXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisrCWZpCisgbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyAKKyBjbGVhbi1nZW5lcmljOgorIAorIGRpc3RjbGVhbi1nZW5lcmljOgorIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisgCisgbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCitAQCAtMjg1OSw2ICszMDY3LDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtcmVjdXJzaXZlCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorIAorIGluZm8tYW06CitAQCAtMjg2OCwxOCArMzA3OCwyOCBAQCBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtQ0ZfaW5jbHVkZUhFQURFUlMgXAorIAorIGluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKyAKKyBpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisgCisraW5zdGFsbC1pbmZvLWFtOgorKworIGluc3RhbGwtbWFuOgorIAorIGluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKyAKKytpbnN0YWxsLXBkZi1hbToKKysKKyBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitAQCAtMjkwNiwzMCArMzEyNiwzMSBAQCB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1DRl9pbmNsdWRlSEVBREVSUyBcCisgCXVuaW5zdGFsbC1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQSBcCisgCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUyB1bmluc3RhbGwtcGtnY29uZmlnREFUQQorIAorLS5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBpbnN0YWxsLWFtIFwKKy0JaW5zdGFsbC1zdHJpcAorLQorLS5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorLQlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorLQljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IFwKKy0JZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1sem1hIGRpc3Qtc2hhciBkaXN0LXRhclogXAorLQlkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKy0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgXAorLQlkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgXAorLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtQ0ZfaW5jbHVkZUhFQURFUlMgXAorLQlpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCistCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKy0JaW5zdGFsbC1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKy0JaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wa2djb25maWdEQVRBIFwKKy0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKy0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCistCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLUNGX2luY2x1ZGVIRUFERVJTIFwKKy0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQSBcCisrLk1BS0U6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKysKKysuUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gXAorKwlhbS0tcmVmcmVzaCBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1jc2NvcGUgY2xlYW4tZ2VuZXJpYyBcCisrCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3Njb3BlIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAorKwljdGFncy1hbSBkaXN0IGRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIGRpc3QtbHppcCBcCisrCWRpc3Qtc2hhciBkaXN0LXRhclogZGlzdC14eiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIFwKKysJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorKwlkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgXAorKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIFwKKysJaW5zdGFsbC1DRl9pbmNsdWRlSEVBREVSUyBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisrCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhREFUQSBcCisrCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorKwlpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKKysJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisrCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCBcCisrCXVuaW5zdGFsbC1DRl9pbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtYW0gXAorKwl1bmluc3RhbGwtbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YURBVEEgXAorIAl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKyAKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKK2RpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNAoraW5kZXggZTUwMTQ0MC4uNDkwMDIyNiAxMDA2NDQKKy0tLSBhL2FjbG9jYWwubTQKKysrKyBiL2FjbG9jYWwubTQKK0BAIC0xLDc5MzkgKzEsMjYgQEAKKy0jIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMC4xIC0qLSBBdXRvY29uZiAtKi0KKysjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xNC4xIC0qLSBBdXRvY29uZiAtKi0KKyAKKy0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKy0jIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCistIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCistCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CistIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCistIyBQQVJUSUNVTEFSIFBVUlBPU0UuCistCistbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKy0gIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKKy1tNF9pZihBQ19BVVRPQ09ORl9WRVJTSU9OLCBbMi42MV0sLAorLVttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKy1Zb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJdCBtYXkgd29yaywgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvLgorLUlmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorLVRvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgYGF1dG9yZWNvbmYnLl0pXSkKKy0KKy0jIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorLSMKKy0jICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKy0jCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CistIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy1tNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorLSMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorLSMKKy0jICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCistIworLSMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKy0jIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorLSMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorLSMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCistIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0jCistIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKy0jIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorLSMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCistXSkKKy0KKy0jIHNlcmlhbCA1NiBMVF9JTklUCistCistCistIyBMVF9QUkVSRVEoVkVSU0lPTikKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCistbTRfZGVmdW4oW0xUX1BSRVJFUV0sCistW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorLSAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorLQkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKKy0JCSAgICAgICAgICAgICA2MyldKV0sCistICAgICAgIFskMl0pXSkKKy0KKy0KKy0jIF9MVF9DSEVDS19CVUlMRERJUgorLSMgLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCistbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCistW2Nhc2UgYHB3ZGAgaW4KKy0gICpcICogfCAqXAkqKQorLSAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKKy1lc2FjCistXSkKKy0KKy0KKy0jIExUX0lOSVQoW09QVElPTlNdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tCistQUNfREVGVU4oW0xUX0lOSVRdLAorLVtBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorLUFDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCistQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorLUFDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorLQorLWRubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorLW00X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCistbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorLWRubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorLWRubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorLUFDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKKy1BQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorLUFDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKKy1BQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorLW00X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCistCistZG5sIFBhcnNlIE9QVElPTlMKKy1fTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKy0KKy0jIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCistTElCVE9PTF9ERVBTPSIkbHRtYWluIgorLQorLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCistQUNfU1VCU1QoTElCVE9PTClkbmwKKy0KKy1fTFRfU0VUVVAKKy0KKy0jIE9ubHkgZXhwYW5kIG9uY2U6CistbTRfZGVmaW5lKFtMVF9JTklUXSkKKy1dKSMgTFRfSU5JVAorLQorLSMgT2xkIG5hbWVzOgorLUFVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCistQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKKy1kbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorLQorLQorLSMgX0xUX0NDX0JBU0VOQU1FKENDKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorLW00X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAorLVtmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworLSAgY2FzZSAkY2NfdGVtcCBpbgorLSAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OworLSAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKy0gICAgXC0qKSA7OworLSAgICAqKSBicmVhazs7CistICBlc2FjCistZG9uZQorLWNjX2Jhc2VuYW1lPWAkRUNITyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorLV0pCistCistCistIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0CistIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KKy1tNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCistWzogJHtDUD0iY3AgLWYifQorLTogJHtNVj0ibXYgLWYifQorLTogJHtSTT0icm0gLWYifQorLV0pIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCistCistCistIyBfTFRfU0VUVVAKKy0jIC0tLS0tLS0tLQorLW00X2RlZnVuKFtfTFRfU0VUVVBdLAorLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCistQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKKy1fTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorLV9MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKKy1fTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCistZG5sCistX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorLV9MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCistX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKKy1kbmwKKy1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKy1BQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKKy1BQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKKy1kbmwKKy1BQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAorLXRlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKy1fTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKKy1kbmwKKy1BQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCistX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAorLV9MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKKy1kbmwKKy1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorLW00X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKKy0KKy1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCistIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorLSMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCistaWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCistICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKy1maQorLV0pCistaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKy0gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorLWZpCistCistX0xUX0NIRUNLX09CSkRJUgorLQorLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorLV9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICistCistY2FzZSAkaG9zdF9vcyBpbgorLWFpeDMqKQorLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCistICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKy0gICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKy0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorLSAgICBDT0xMRUNUX05BTUVTPQorLSAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworLSAgZmkKKy0gIDs7CistZXNhYworLQorLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKy0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKy0KKy0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKy1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKy0KKy0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorLSMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KKy1kZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworLQorLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCistZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKy0KKy0jIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKKy1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKy0KKy0jIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorLWNhbl9idWlsZF9zaGFyZWQ9eWVzCistCistIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCistIyB3aGljaCBuZWVkcyAnLmxpYicpLgorLWxpYmV4dD1hCistCistd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKy0KKy1vbGRfQ0M9IiRDQyIKKy1vbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorLQorLSMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCistdGVzdCAteiAiJENDIiAmJiBDQz1jYworLXRlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQworLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUworLXRlc3QgLXogIiRMRCIgJiYgTEQ9bGQKKy10ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworLQorLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKy0KKy0jIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKKy10ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorLWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCistZmlsZV9tYWdpYyopCistICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCistICAgIF9MVF9QQVRIX01BR0lDCistICBmaQorLSAgOzsKKy1lc2FjCistCistIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKy1MVF9TVVBQT1JURURfVEFHKFtDQ10pCistX0xUX0xBTkdfQ19DT05GSUcKKy1fTFRfTEFOR19ERUZBVUxUX0NPTkZJRworLV9MVF9DT05GSUdfQ09NTUFORFMKKy1dKSMgX0xUX1NFVFVQCistCistCistIyBfTFRfUFJPR19MVE1BSU4KKy0jIC0tLS0tLS0tLS0tLS0tLQorLSMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCistIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorLSMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorLSMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KKy1tNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKKy1bbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorLV0pIyBfTFRfUFJPR19MVE1BSU4KKy0KKy0KKy0KKy0jIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorLSMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKKy0jIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCistIyBsYWJlbC4KKy0KKy0KKy0jIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KKy1tNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKKy1bbTRfaWZ2YWwoWyQxXSwKKy0gICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorLSAgICAgICAgICAgICAgICAgICAgIFskMQorLV0pXSldKQorLQorLSMgSW5pdGlhbGl6ZS4KKy1tNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKKy0KKy0KKy0jIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorLW00X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKKy1bbTRfaWZ2YWwoWyQxXSwKKy0gICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKy0gICAgICAgICAgICAgICAgICAgICBbJDEKKy1dKV0pXSkKKy0KKy0jIEluaXRpYWxpemUuCistbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorLQorLQorLSMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCistW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCistXSkKKy0KKy0KKy0jIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworLSMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgorLW00X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKKy1bbTRfaWZ2YWwoWyQxXSwgWworLW00X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCistICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCistKV0pCistCistCistCistCistCistIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCistIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorLSMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCistIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KKy1tNF9kZWZpbmUoW19MVF9ERUNMXSwKKy1bbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAorLSAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKy0JW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKy0gICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQorLSAgICBtNF9pZnZhbChbJDRdLAorLQlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCistICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKKy0JW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorLV0pCistCistCistIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCistCistCistIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAorLVtfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKy0KKy0KKy0jIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAorLVttNF9jYXNlKFskI10sCistICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKy0gIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKy0gIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorLSAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKy0gIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAorLV0pCistCistCistIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAorLVtfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorLQorLQorLSMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKKy1bX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKy0KKy0KKy0jIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCistW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorLSAgICAgbTRfcXVvdGUobTRfaWYoWyQyXSwgW10sCistCQkgICAgIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKy0JCSAgbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpLAorLSAgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSkpKV0pCistbTRfZGVmaW5lKFtfbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pCistCistCistIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorLVtfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKy0gICAgIG00X2lmKFskMl0sIFtdLAorLQkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKy0JbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKKy1dKQorLW00X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKKy1bbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKy0JCQlsdF9kZWNsX3RhZ192YXJuYW1lcyhbWywgXV0sIG00X3NoaWZ0KCRAKSkpKWRubAorLV0pCistCistCistIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gYGNvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCistIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCistIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCistbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKKy1bJDE9J2AkRUNITyAiWCRdWyQxIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKKy0KKy0KKy0jIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKy0jIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAorLSMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCistIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKy0jCistIyAgICA8dmFyPj0nYCRFQ0hPICJYJDx2YXI+IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCistW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCistICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCistCistCistIyBfTFRfTElCVE9PTF9UQUdTCistIyAtLS0tLS0tLS0tLS0tLS0tCistIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CistbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorLVtfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCistYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorLV0pCistCistCistIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKy0jIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorLSMKKy0jICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKy0jICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorLW00X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCistW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorLQkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCistbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCistICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKKy1tNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKy0gICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCistICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorLSAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKy0gICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCistbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCistXSkKKy0KKy0KKy0jIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCistIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKy0jIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworLSMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorLW00X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCistW200X2ZvcmVhY2goW19sdF92YXJdLAorLSAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorLSAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorLQorLQorLSMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorLVttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorLSAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorLQorLQorLSMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorLQorLQorLSMgX0xUX0NPTkZJR19DT01NQU5EUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCistIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKy0jIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworLSMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCistIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorLSMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KKy1tNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCistW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorLQlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorLQlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCistCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorLQlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorLSAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCistICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKy0gICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKy0gICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CistICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorLSAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKKy1dKSNfTFRfQ09ORklHX0NPTU1BTkRTCistCistCistIyBJbml0aWFsaXplLgorLW00X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorLVsKKy0KKy0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorLSMgaWYgQ0RQQVRIIGlzIHNldC4KKy0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICistCistc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworLWRvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKKy1kZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworLV9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworLUxUQ0M9JyRMVENDJworLUxUQ0ZMQUdTPSckTFRDRkxBR1MnCistY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworLQorLSMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCistZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCistXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKy0gICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKy0gICAgICA7OworLSAgICAqKQorLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorLSAgICAgIDs7CistICAgIGVzYWMKKy1kb25lCistCistIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorLWZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorLV1dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCistICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorLSAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCistICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorLSAgICAgIDs7CistICAgICopCistICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCistICAgICAgOzsKKy0gICAgZXNhYworLWRvbmUKKy0KKy0jIEZpeC11cCBmYWxsYmFjayBlY2hvIGlmIGl0IHdhcyBtYW5nbGVkIGJ5IHRoZSBhYm92ZSBxdW90aW5nIHJ1bGVzLgorLWNhc2UgXCRsdF9FQ0hPIGluCistKidcXFxbJF0wIC0tZmFsbGJhY2stZWNobyInKWRubCAiCistICBsdF9FQ0hPPVxgXCRFQ0hPICJYXCRsdF9FQ0hPIiB8IFwkWHNlZCAtZSAncy9cXFxcXFxcXFxcXFxcXFxbJF0wIC0tZmFsbGJhY2stZWNobyJcWyRdL1xbJF0wIC0tZmFsbGJhY2stZWNobyIvJ1xgCistICA7OworLWVzYWMKKy0KKy1fTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorLV0pCistCistCistIyBMVF9PVVRQVVQKKy0jIC0tLS0tLS0tLQorLSMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorLSMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KKy0jIHRlc3RzLgorLUFDX0RFRlVOKFtMVF9PVVRQVVRdLAorLVs6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQorLUFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorLWNhdCA+IiRDT05GSUdfTFQiIDw8X0xURU9GCistIyEgJFNIRUxMCistIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorLSMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCistCistbHRfY2xfc2lsZW50PWZhbHNlCistU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KKy1fTFRFT0YKKy0KKy1jYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCistQVNfU0hFTExfU0FOSVRJWkUKKy1fQVNfUFJFUEFSRQorLQorLWV4ZWMgQVNfTUVTU0FHRV9GRD4mMQorLWV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKKy17CistICBlY2hvCistICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCistfSA+JkFTX01FU1NBR0VfTE9HX0ZECistCistbHRfY2xfaGVscD0iXAorLVxgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKKy1mb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKKy1nZW5lcmF0ZWQuCistCistVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKy0KKy0gIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorLSAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKy0gIC1xLCAtLXF1aWV0ICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKy0gIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCistCistUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKKy0KKy1sdF9jbF92ZXJzaW9uPSJcCistbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorLW00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCistY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCistCistQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLVRoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCistZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorLQorLXdoaWxlIHRlc3QgJFsjXSAhPSAwCistZG8KKy0gIGNhc2UgJFsxXSBpbgorLSAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorLSAgICAgIGVjaG8gIiRsdF9jbF92ZXJzaW9uIjsgZXhpdCAwIDs7CistICAgIC0taGVscCB8IC0taCogfCAtaCApCistICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKy0gICAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCistICAgICAgZGVidWc9OiA7OworLSAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKy0gICAgICBsdF9jbF9zaWxlbnQ9OiA7OworLQorLSAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCistVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CistCistICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCistVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CistICBlc2FjCistICBzaGlmdAorLWRvbmUKKy0KKy1pZiAkbHRfY2xfc2lsZW50OyB0aGVuCistICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCistZmkKKy1fTFRFT0YKKy0KKy1jYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKKy1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAorLV9MVEVPRgorLQorLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKKy1BQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorLV9MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworLUFTX0VYSVQoMCkKKy1fTFRFT0YKKy1jaG1vZCAreCAiJENPTkZJR19MVCIKKy0KKy0jIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorLSMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CistIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCistIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgorLWlmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorLSAgbHRfY2xfc3VjY2Vzcz06CistICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorLSAgICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCistICBleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorLSAgJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorLSAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworLSAgJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorLWZpCistXSkjIExUX09VVFBVVAorLQorLQorLSMgX0xUX0NPTkZJRyhUQUcpCistIyAtLS0tLS0tLS0tLS0tLS0KKy0jIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKy0jIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorLSMgdG8gY29uZmlnLnN0YXR1cyBmb3IgYXBwZW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG5hbWVkIGJ5IFRBRyBmcm9tIHRoZQorLSMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorLW00X2RlZnVuKFtfTFRfQ09ORklHXSwKKy1bbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCistX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKy0gIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorLSAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCistICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKy0gICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCistICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCistICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKy0gICAgZmkKKy0KKy0gICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorLSAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorLSAgICAkUk0gIiRjZmdmaWxlIgorLQorLSAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0jISAkU0hFTEwKKy0KKy0jIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCistIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorLSMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorLSMKKy1fTFRfQ09QWUlORworLV9MVF9MSUJUT09MX1RBR1MKKy0KKy0jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworLV9MVF9MSUJUT09MX0NPTkZJR19WQVJTCistX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKy0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKy0KKy1fTFRfRU9GCistCistICBjYXNlICRob3N0X29zIGluCistICBhaXgzKikKKy0gICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLSMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorLSMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKy1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKy0gIENPTExFQ1RfTkFNRVM9CistICBleHBvcnQgQ09MTEVDVF9OQU1FUworLWZpCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLSAgX0xUX1BST0dfTFRNQUlOCistCistICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKy0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKy0gICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCistICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorLSAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorLSAgY2htb2QgK3ggIiRvZmlsZSIKKy1dLAorLVtjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCistCistZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKKy1kbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKKy1fTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCistX0xUX0VPRgorLV0pZG5sIC9tNF9pZgorLV0sCistW200X2lmKFskMV0sIFtdLCBbCistICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworLSAgICBWRVJTSU9OPSckVkVSU0lPTicKKy0gICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworLSAgICBSTT0nJFJNJworLSAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorLV0pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKKy1dKSMgX0xUX0NPTkZJRworLQorLQorLSMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKy0jIC0tdGFnIG9wdGlvbiwgdXNpbmc6CistIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworLUFDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCistCistCistIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworLW00X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCistbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorLQorLQorLSMgTFRfTEFORyhMQU5HKQorLSMgLS0tLS0tLS0tLS0tLQorLSMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCistQUNfREVGVU4oW0xUX0xBTkddLAorLVtBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCistbTRfY2FzZShbJDFdLAorLSAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCistICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKy0gIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKKy0gIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKKy0gIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorLSAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKKy0gIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAorLSAgICBbX0xUX0xBTkcoJDEpXSwKKy0gICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKKy1dKSMgTFRfTEFORworLQorLQorLSMgX0xUX0xBTkcoTEFOR05BTUUpCistIyAtLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZ1bihbX0xUX0xBTkddLAorLVttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCistICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorLSAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAorLSAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKKy0gIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorLV0pIyBfTFRfTEFORworLQorLQorLSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKKy1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKy0gIFtMVF9MQU5HKENYWCldLAorLSAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKy0KKy1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorLSAgW0xUX0xBTkcoRjc3KV0sCistICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQorLQorLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKy0gIFtMVF9MQU5HKEZDKV0sCistICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorLQorLWRubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKKy1kbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KKy1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorLSAgW0xUX0xBTkcoR0NKKV0sCistICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorLSAgICBbTFRfTEFORyhHQ0opXSwKKy0gICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCistICAgICAgW0xUX0xBTkcoR0NKKV0sCistICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCistCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCistICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKy0JW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCistICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCistCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCistCistQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAorLSAgW0xUX0xBTkcoUkMpXSwKKy0gIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCistXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCistCistIyBPYnNvbGV0ZSBtYWNyb3M6CistQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCistQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorLUFVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorLUFVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKKy1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKKy1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCistCistCistIyBfTFRfVEFHX0NPTVBJTEVSCistIyAtLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAorLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKy0KKy1fTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCistX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorLV9MVF9UQUdERUNMKFtDQ10sIFtjb21waWxlcl0sIFsxXSwgW0EgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXJdKWRubAorLV9MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAorLQorLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCistTFRDQz0ke0xUQ0MtIiRDQyJ9CistCistIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorLQorLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCistY29tcGlsZXI9JENDCistXSkjIF9MVF9UQUdfQ09NUElMRVIKKy0KKy0KKy0jIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKy0jIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAorLVttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CistZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCistX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorLSRSTSBjb25mdGVzdCoKKy1dKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCistCistCistIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCistIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgorLW00X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKKy1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKy1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCistJFJNIC1yIGNvbmZ0ZXN0KgorLV0pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCistCistIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCistICBjYXNlICRob3N0X29zIGluCistICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCistICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQorLSAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorLSAgICBBQ19DSEVDS19UT09MKFtMSVBPXSwgW2xpcG9dLCBbOl0pCistICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQorLSAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCistICAgIF9MVF9ERUNMKFtdLCBbRFNZTVVUSUxdLCBbMV0sCistICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQorLSAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKy0gICAgICBbVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFhdKQorLSAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCistICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorLSAgICBfTFRfREVDTChbXSwgW09UT09MXSwgWzFdLAorLSAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCistICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKy0gICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjRdKQorLQorLSAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCistICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKy0gICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCistCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorLQkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKy0JIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorLQkjIGxpbmsgZmxhZ3MuCistCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKy0JZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKy0JZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy0tZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorLQkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLQkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCistICAgICAgICBfbHRfcmVzdWx0PSQ/CistCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgorLQkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCistCWVsc2UKKy0JICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKy0JZmkKKy0Jcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorLQlybSAtZiBjb25mdGVzdC4qCistICAgICAgZmldKQorLSAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWddLAorLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKy0gICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKy0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKy0gICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCistICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorLQlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCistCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorLQlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorLSAgICBdKQorLSAgICBjYXNlICRob3N0X29zIGluCistICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKy0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CistICAgIGRhcndpbjEuKikKKy0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CistICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbiAKKy0gICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCistICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKy0gICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8gCistICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorLQkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCistCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworLQkxMC5bWzAxMl1dKikKKy0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CistCTEwLiopCistCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworLSAgICAgIGVzYWMKKy0gICAgOzsKKy0gIGVzYWMKKy0gICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKy0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworLSAgICBmaQorLSAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCistICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworLSAgICBlbHNlCistICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCistICAgIGZpCistICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCistICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKy0gICAgZWxzZQorLSAgICAgIF9sdF9kc3ltdXRpbD0KKy0gICAgZmkKKy0gICAgOzsKKy0gIGVzYWMKKy1dKQorLQorLQorLSMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCistbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKKy1bCistICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCistICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKy0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKy0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCistICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorLSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCistICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKy0gIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorLSAgaWYgdGVzdCAiJEdDQyIgPSAieWVzIjsgdGhlbgorLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCistICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCistICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorLSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorLSAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCistICAgIG00X2lmKFskMV0sIFtDWFhdLAorLVsgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorLSAgICBmaQorLV0sW10pCistICBlbHNlCistICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICBmaQorLV0pCistCistIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKy0jIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKy0jIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKy0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKy0jIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCistIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKy1tNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorLVttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorLUFDX0xJTktfSUZFTFNFKEFDX0xBTkdfUFJPR1JBTSxbCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpXSxbXSkKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKy1dKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKy0KKy0KKy0jIF9MVF9TSEVMTF9JTklUKEFSRykKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKKy1baWZkZWYoW0FDX0RJVkVSU0lPTl9OT1RJQ0VdLAorLQkgICAgIFtBQ19ESVZFUlRfUFVTSChBQ19ESVZFUlNJT05fTk9USUNFKV0sCistCSBbQUNfRElWRVJUX1BVU0goTk9USUNFKV0pCistJDEKKy1BQ19ESVZFUlRfUE9QCistXSkjIF9MVF9TSEVMTF9JTklUCistCistCistIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaAorLSMgd2lsbCBmaW5kIGFuIGVjaG8gY29tbWFuZCB3aGljaCBkb2Vzbid0IGludGVycHJldCBiYWNrc2xhc2hlcy4KKy1tNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorLVtfTFRfU0hFTExfSU5JVChbCistIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CistCistY2FzZSBYJGx0X0VDSE8gaW4KKy1YKi0tZmFsbGJhY2stZWNobykKKy0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCistICBFQ0hPPWBlY2hvICIkbHRfRUNITyIgfCBzZWQgJ3MsXFxcXFxbJF1cXFskXTAsJ1skXTAnLCdgCistICA7OworLWVzYWMKKy0KKy1FQ0hPPSR7bHRfRUNITy1lY2hvfQorLWlmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorLSAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCistICBzaGlmdAorLWVsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorLSAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorLSAgOgorLWVsaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgorLSAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQorLSAgOgorLWVsc2UKKy0gICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KKy0gIGV4ZWMgJFNIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorLWZpCistCistaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKy0gIHNoaWZ0CistICBjYXQgPDxfTFRfRU9GCistWyRdKgorLV9MVF9FT0YKKy0gIGV4aXQgMAorLWZpCistCistIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKy0jIGlmIENEUEFUSCBpcyBzZXQuCistKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorLQorLWlmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorLSAgaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCistICAgICMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorLSAgICBmb3IgY21kIGluICdzZWQgNTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMnEgIlskXTAiJyAnZWNobyB0ZXN0JzsgZG8KKy0gICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorLSAgICAgIGlmIHsgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYDsgfSAyPi9kZXYvbnVsbCAmJgorLQkgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGwKKy0gICAgICB0aGVuCistICAgICAgICBicmVhaworLSAgICAgIGZpCistICAgIGRvbmUKKy0gIGZpCistCistICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKy0gICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKy0gICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorLSAgICA6CistICBlbHNlCistICAgICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQorLSAgICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCistICAgICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCistICAgICMKKy0gICAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgorLQorLSAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy0gICAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKy0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKy0gICAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorLSAgICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKy0gICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorLSAgICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorLSAgICAgICAgRUNITz0iJGRpci9lY2hvIgorLSAgICAgICAgYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICAgIElGUz0iJGx0X3NhdmVfaWZzIgorLQorLSAgICBpZiB0ZXN0ICJYJEVDSE8iID0gWGVjaG87IHRoZW4KKy0gICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKy0gICAgICBpZiB0ZXN0ICJYYHsgcHJpbnQgLXIgJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKy0gICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7IHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCistICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCistICAgICAgICAjIFRoaXMgc2hlbGwgaGFzIGEgYnVpbHRpbiBwcmludCAtciB0aGF0IGRvZXMgdGhlIHRyaWNrLgorLSAgICAgICAgRUNITz0ncHJpbnQgLXInCistICAgICAgZWxpZiB7IHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQ7IH0gJiYKKy0JICAgdGVzdCAiWCRDT05GSUdfU0hFTEwiICE9IFgvYmluL2tzaDsgdGhlbgorLSAgICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCistICAgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKy0gICAgICAgIGV4cG9ydCBPUklHSU5BTF9DT05GSUdfU0hFTEwKKy0gICAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorLSAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorLSAgICAgICAgZXhlYyAkQ09ORklHX1NIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorLSAgICAgIGVsc2UKKy0gICAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKy0gICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworLSAgICAgICAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCistCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKy0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCistCSAgIyBDb29sLCBwcmludGYgd29ya3MKKy0JICA6CistICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCistCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCistCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKy0JICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKy0JICBDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAorLQkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKy0JICBTSEVMTD0iJENPTkZJR19TSEVMTCIKKy0JICBleHBvcnQgU0hFTEwKKy0JICBFQ0hPPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorLSAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorLQkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorLQkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCistCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCistCSAgRUNITz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKKy0gICAgICAgIGVsc2UKKy0JICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorLQkgIHByZXY9OgorLQorLQkgIGZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDUwcSAiWyRdMCInOyBkbworLQkgICAgaWYgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCI7IH0gMj4vZGV2L251bGwKKy0JICAgIHRoZW4KKy0JICAgICAgYnJlYWsKKy0JICAgIGZpCistCSAgICBwcmV2PSIkY21kIgorLQkgIGRvbmUKKy0KKy0JICBpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorLQkgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKy0JICAgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCistCSAgICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKy0JICBlbHNlCistCSAgICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorLQkgICAgRUNITz1lY2hvCistCSAgZmkKKy0gICAgICAgIGZpCistICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistZmkKKy0KKy0jIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCistIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCistbHRfRUNITz0kRUNITworLWlmIHRlc3QgIlgkbHRfRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCistICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXFskXTAgLS1mYWxsYmFjay1lY2hvIgorLWZpCistCistQUNfU1VCU1QobHRfRUNITykKKy1dKQorLV9MVF9ERUNMKFtdLCBbU0hFTExdLCBbMV0sIFtTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzXSkKKy1fTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sCistICAgIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXNdKQorLV0pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorLQorLQorLSMgX0xUX0VOQUJMRV9MT0NLCistIyAtLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKKy1bQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKy0gIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCistICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQorLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCistCistIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCistIyBsaWJ0b29sIHN1cHBvcnQuCistY2FzZSAkaG9zdCBpbgorLWlhNjQtKi1ocHV4KikKKy0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKy0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CistICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCistICAgICAgKkVMRi0zMiopCistCUhQVVhfSUE2NF9NT0RFPSIzMiIKKy0JOzsKKy0gICAgICAqRUxGLTY0KikKKy0JSFBVWF9JQTY0X01PREU9IjY0IgorLQk7OworLSAgICBlc2FjCistICBmaQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgOzsKKy0qLSotaXJpeDYqKQorLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorLSAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKy0gICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorLSAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKy0JKjMyLWJpdCopCistCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKy0JICA7OworLQkqTjMyKikKKy0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCistCSAgOzsKKy0JKjY0LWJpdCopCistCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorLQk7OworLSAgICAgIGVzYWMKKy0gICAgZWxzZQorLSAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKy0JKjMyLWJpdCopCistCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKy0JICA7OworLQkqTjMyKikKKy0JICBMRD0iJHtMRC1sZH0gLW4zMiIKKy0JICA7OworLQkqNjQtYml0KikKKy0JICBMRD0iJHtMRC1sZH0gLTY0IgorLQkgIDs7CistICAgICAgZXNhYworLSAgICBmaQorLSAgZmkKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIDs7CistCisteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCistczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKy0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKy0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CistICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCistICAgICAgKjMyLWJpdCopCistCWNhc2UgJGhvc3QgaW4KKy0JICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKy0JICAgIDs7CistCSAgeDg2XzY0LSpsaW51eCopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCistCSAgICA7OworLQkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKy0JICAgIDs7CistCSAgczM5MHgtKmxpbnV4KikKKy0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKy0JICAgIDs7CistCSAgc3BhcmM2NC0qbGludXgqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorLQkgICAgOzsKKy0JZXNhYworLQk7OworLSAgICAgICo2NC1iaXQqKQorLQljYXNlICRob3N0IGluCistCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKy0JICAgIDs7CistCSAgeDg2XzY0LSpsaW51eCopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKy0JICAgIDs7CistCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCistCSAgICA7OworLQkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKy0JICAgIDs7CistCSAgc3BhcmMqLSpsaW51eCopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCistCSAgICA7OworLQllc2FjCistCTs7CistICAgIGVzYWMKKy0gIGZpCistICBybSAtcmYgY29uZnRlc3QqCistICA7OworLQorLSotKi1zY28zLjJ2NSopCistICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCistICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKy0gIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKy0gICAgW0FDX0xBTkdfUFVTSChDKQorLSAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKy0gICAgIEFDX0xBTkdfUE9QXSkKKy0gIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCistICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorLSAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKy0gIGZpCistICA7OworLXNwYXJjKi0qc29sYXJpcyopCistICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCistICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKy0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorLSAgICAqNjQtYml0KikKKy0gICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorLSAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKKy0gICAgICAqKQorLQlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0JICBMRD0iJHtMRC1sZH0gLTY0IgorLQlmaQorLQk7OworLSAgICAgIGVzYWMKKy0gICAgICA7OworLSAgICBlc2FjCistICBmaQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgOzsKKy1lc2FjCistCistbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCistXSkjIF9MVF9FTkFCTEVfTE9DSworLQorLQorLSMgX0xUX0NNRF9PTERfQVJDSElWRQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKKy1bQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGZhbHNlKQorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorLV9MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorLV9MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0pCistCistQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCistdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CistX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKy0KKy1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQorLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CistX0xUX0RFQ0woW10sIFtSQU5MSUJdLCBbMV0sCistICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorLQorLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKy1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorLQorLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICBjYXNlICRob3N0X29zIGluCistICBvcGVuYnNkKikKKy0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKy0gICAgOzsKKy0gICopCistICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCistICAgIDs7CistICBlc2FjCistICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKy1maQorLV9MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCistX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorLV9MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKy0gICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorLV0pIyBfTFRfQ01EX09MRF9BUkNISVZFCistCistCistIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorLSMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKKy1BQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCistW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCistQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKy0gIFskMj1ubworLSAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKy0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKy0gICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKy0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCistICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCistICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKy0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKy0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCistICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCistICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKy0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCistICAgYWNfc3RhdHVzPSQ/CistICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECistICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKy0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCistICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCistICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKy0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKy0gICAgICAgJDI9eWVzCistICAgICBmaQorLSAgIGZpCistICAgJFJNIGNvbmZ0ZXN0KgorLV0pCistCistaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKy0gICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorLWVsc2UKKy0gICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorLWZpCistXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KKy0KKy0jIE9sZCBuYW1lOgorLUFVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorLQorLQorLSMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCistIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCistQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKKy1bbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCistbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorLSAgWyQyPW5vCistICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICBMREZMQUdTPSIkTERGTEFHUyAkMyIKKy0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKy0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCistICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECistICAgICAgICRFQ0hPICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKy0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKy0gICAgICAgICAkMj15ZXMKKy0gICAgICAgZmkKKy0gICAgIGVsc2UKKy0gICAgICAgJDI9eWVzCistICAgICBmaQorLSAgIGZpCistICAgJFJNIC1yIGNvbmZ0ZXN0KgorLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCistXSkKKy0KKy1pZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorLSAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCistZWxzZQorLSAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCistZmkKKy1dKSMgX0xUX0xJTktFUl9PUFRJT04KKy0KKy0jIE9sZCBuYW1lOgorLUFVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorLQorLQorLSMgTFRfQ01EX01BWF9MRU4KKy0jLS0tLS0tLS0tLS0tLS0tCistQUNfREVGVU4oW0xUX0NNRF9NQVhfTEVOXSwKKy1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorLSMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworLUFDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorLSAgaT0wCistICB0ZXN0c3RyaW5nPSJBQkNEIgorLQorLSAgY2FzZSAkYnVpbGRfb3MgaW4KKy0gIG1zZG9zZGpncHAqKQorLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCistICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKy0gICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKy0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKy0gICAgOzsKKy0KKy0gIGdudSopCistICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKy0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworLSAgICA7OworLQorLSAgY3lnd2luKiB8IG1pbmd3KikKKy0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKy0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKy0gICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKy0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCistICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKy0gICAgOzsKKy0KKy0gIGFtaWdhb3MqKQorLSAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCistICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworLSAgICA7OworLQorLSAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKy0gICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCistICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCistICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorLSAgICBlbHNlCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCistICAgIGZpCistICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCistICAgIDs7CistCistICBpbnRlcml4KikKKy0gICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKy0gICAgOzsKKy0KKy0gIG9zZiopCistICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorLSAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorLSAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CistICAgICMKKy0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKy0gICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorLSAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKy0gICAgICBlc2FjCistICAgIGZpCistICAgIDs7CistICBzY28zLjJ2NSopCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKy0gICAgOzsKKy0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKy0gICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorLSAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKy0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCistICAgIGVsc2UKKy0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKy0gICAgZmkKKy0gICAgOzsKKy0gICopCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorLSAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKy0gICAgZWxzZQorLSAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKy0gICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCistICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKy0gICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworLSAgICAgIGRvbmUKKy0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorLSAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCistICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKy0gICAgICAjIHdlIGNhbid0IHRlbGwuCistICAgICAgd2hpbGUgeyB0ZXN0ICJYImAkU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorLQkgICAgICAgICA9ICJYWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKy0gICAgICBkbworLSAgICAgICAgaT1gZXhwciAkaSArIDFgCistICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKy0gICAgICBkb25lCistICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorLSAgICAgIHRlc3RzdHJpbmc9CistICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorLSAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCistICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKy0gICAgZmkKKy0gICAgOzsKKy0gIGVzYWMKKy1dKQorLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKy0gIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKKy1lbHNlCistICBBQ19NU0dfUkVTVUxUKG5vbmUpCistZmkKKy1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCistX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKKy0gICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorLV0pIyBMVF9DTURfTUFYX0xFTgorLQorLSMgT2xkIG5hbWU6CistQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorLQorLQorLSMgX0xUX0hFQURFUl9ETEZDTgorLSMgLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKKy1bQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorLV0pIyBfTFRfSEVBREVSX0RMRkNOCistCistCistIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCistIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorLVttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKKy1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CistICBbJDRdCistZWxzZQorLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorLSAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistWyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLQorLSNpZiBIQVZFX0RMRkNOX0gKKy0jaW5jbHVkZSA8ZGxmY24uaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0KKy0jaWZkZWYgUlRMRF9HTE9CQUwKKy0jICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCistI2Vsc2UKKy0jICBpZmRlZiBETF9HTE9CQUwKKy0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCistIyAgZWxzZQorLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCistIyAgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCistICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworLSNpZm5kZWYgTFRfRExMQVpZX09SX05PVworLSMgIGlmZGVmIFJUTERfTEFaWQorLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorLSMgIGVsc2UKKy0jICAgIGlmZGVmIERMX0xBWlkKKy0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKy0jICAgIGVsc2UKKy0jICAgICAgaWZkZWYgUlRMRF9OT1cKKy0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworLSMgICAgICBlbHNlCistIyAgICAgICAgaWZkZWYgRExfTk9XCistIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKy0jICAgICAgICBlbHNlCistIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCistIyAgICAgICAgZW5kaWYKKy0jICAgICAgZW5kaWYKKy0jICAgIGVuZGlmCistIyAgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKy0jZW5kaWYKKy0KKy12b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CistaW50IG1haW4gKCkKKy17CistICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKy0gIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworLQorLSAgaWYgKHNlbGYpCistICAgIHsKKy0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKy0gICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworLSAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworLSAgICB9CistICBlbHNlCistICAgIHB1dHMgKGRsZXJyb3IgKCkpOworLQorLSAgICBleGl0IChzdGF0dXMpOworLX1dCistX0xUX0VPRgorLSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCistICAgIGx0X3N0YXR1cz0kPworLSAgICBjYXNlIHgkbHRfc3RhdHVzIGluCistICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKy0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7CistICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CistICAgIGVzYWMKKy0gIGVsc2UgOgorLSAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorLSAgICAkMworLSAgZmkKKy1maQorLXJtIC1mciBjb25mdGVzdCoKKy1dKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgorLQorLQorLSMgTFRfU1lTX0RMT1BFTl9TRUxGCistIyAtLS0tLS0tLS0tLS0tLS0tLS0KKy1BQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKKy1bbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCistaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCistICBlbmFibGVfZGxvcGVuPXVua25vd24KKy0gIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCistICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KKy1lbHNlCistICBsdF9jdl9kbG9wZW49bm8KKy0gIGx0X2N2X2Rsb3Blbl9saWJzPQorLQorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgYmVvcyopCistICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCistICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKy0gICAgOzsKKy0KKy0gIG1pbmd3KiB8IHB3MzIqKQorLSAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KKy0gICAgOzsKKy0KKy0gIGN5Z3dpbiopCistICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KKy0gICAgOzsKKy0KKy0gIGRhcndpbiopCistICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorLSAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCistCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWworLSAgICBsdF9jdl9kbG9wZW49ImR5bGQiCistICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKy0gICAgXSkKKy0gICAgOzsKKy0KKy0gICopCistICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKy0JICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAorLSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCistCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCistCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorLQkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKy0JICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorLQkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorLQkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKy0JICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKy0JCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0pCistCSAgICAgIF0pCistCSAgICBdKQorLQkgIF0pCistCV0pCistICAgICAgXSkKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0gIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKy0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKKy0gIGVsc2UKKy0gICAgZW5hYmxlX2Rsb3Blbj1ubworLSAgZmkKKy0KKy0gIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorLSAgZGxvcGVuKQorLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCistICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorLQorLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCistCistICAgIHNhdmVfTElCUz0iJExJQlMiCistICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKy0KKy0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKy0JICBsdF9jdl9kbG9wZW5fc2VsZiwgW2RubAorLQkgIF9MVF9UUllfRExPUEVOX1NFTEYoCistCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKKy0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKKy0gICAgXSkKKy0KKy0gICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCistICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCistICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKy0JICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKKy0JICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKy0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKKy0gICAgICBdKQorLSAgICBmaQorLQorLSAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCistICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCistICAgIExJQlM9IiRzYXZlX0xJQlMiCistICAgIDs7CistICBlc2FjCistCistICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CistICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworLSAgZXNhYworLQorLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCistICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworLSAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CistICBlc2FjCistZmkKKy1fTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKKy0JIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQorLV9MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCistCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKKy1fTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCistCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKKy1dKSMgTFRfU1lTX0RMT1BFTl9TRUxGCistCistIyBPbGQgbmFtZToKKy1BVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKy0KKy0KKy0jIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KKy0jIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKKy1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKy1BQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCistICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKy0gIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KKy0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKy0gICBta2RpciBjb25mdGVzdAorLSAgIGNkIGNvbmZ0ZXN0CistICAgbWtkaXIgb3V0CistICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CistCistICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCistICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKy0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCistICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKy0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKy0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCistICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCistICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKy0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorLSAgIGFjX3N0YXR1cz0kPworLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKy0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECistICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKy0gICB0aGVuCistICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCistICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKy0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCistICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCistICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKy0gICAgIGZpCistICAgZmkKKy0gICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorLSAgICRSTSBjb25mdGVzdCoKKy0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCistICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCistICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworLSAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKy0gICBjZCAuLgorLSAgICRSTSAtciBjb25mdGVzdAorLSAgICRSTSBjb25mdGVzdCoKKy1dKQorLV9MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCistCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKKy1dKSMgX0xUX0NPTVBJTEVSX0NfTworLQorLQorLSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKKy1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAorLVttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorLV9MVF9DT01QSUxFUl9DX08oWyQxXSkKKy0KKy1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCistaWYgdGVzdCAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKy0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQorLSAgaGFyZF9saW5rcz15ZXMKKy0gICRSTSBjb25mdGVzdCoKKy0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCistICB0b3VjaCBjb25mdGVzdC5hCistICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCistICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworLSAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKy0gICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorLSAgICBuZWVkX2xvY2tzPXdhcm4KKy0gIGZpCistZWxzZQorLSAgbmVlZF9sb2Nrcz1ubworLWZpCistX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKKy1dKSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MKKy0KKy0KKy0jIF9MVF9DSEVDS19PQkpESVIKKy0jIC0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCistW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCistW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCistbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKKy1pZiB0ZXN0IC1kIC5saWJzOyB0aGVuCistICBsdF9jdl9vYmpkaXI9LmxpYnMKKy1lbHNlCistICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorLSAgbHRfY3Zfb2JqZGlyPV9saWJzCistZmkKKy1ybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCistb2JqZGlyPSRsdF9jdl9vYmpkaXIKKy1fTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKKy0gICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKKy1tNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorLUFDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCistICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorLV0pIyBfTFRfQ0hFQ0tfT0JKRElSCistCistCistIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KKy1tNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKKy1bQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQorLWlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKy0gICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAorLSAgIHRlc3QgIlgkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCistCistICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCistICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKKy0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKy0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKy0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKy0gICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKy0gICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKy0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKy0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKy0gIGVsc2UKKy0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKy0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKy0gIGZpCistZWxzZQorLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKy0gICMgZGlyZWN0b3JpZXMuCistICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCistZmkKKy1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCistCistaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CistICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgorLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCistICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCistZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKy0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworLWZpCistX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCistICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCistXSkjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSAorLQorLQorLSMgX0xUX0NNRF9TVFJJUExJQgorLSMgLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKKy1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorLXN0cmlwbGliPQorLW9sZF9zdHJpcGxpYj0KKy1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCistaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKy0gIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCistICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKy0gIEFDX01TR19SRVNVTFQoW3llc10pCistZWxzZQorLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgZGFyd2luKikKKy0gICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKy0gICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorLSAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorLSAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICAgIGVsc2UKKy0gICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIGZpCistICAgIDs7CistICAqKQorLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIDs7CistICBlc2FjCistZmkKKy1fTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCistX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKKy1dKSMgX0xUX0NNRF9TVFJJUExJQgorLQorLQorLSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworLW00X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKKy1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorLUFDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKKy1tNF9pZihbJDFdLAorLQlbXSwgWworLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICBjYXNlICRob3N0X29zIGluCistICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKy0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKy0gIGVzYWMKKy0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCistICBpZiAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJzsnID4vZGV2L251bGwgOyB0aGVuCistICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKy0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCistICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorLSAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKy0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorLSAgZWxzZQorLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCistICBmaQorLSAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKy0gICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CistICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorLSAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKy0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorLSAgICBlbHNlCistICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCistCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorLSAgICBmaQorLSAgZG9uZQorLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKKy1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CistICBsdF9mb289IiI7CistICBsdF9jb3VudD0wOworLSAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKy0gICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworLSAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CistICAgICAgICBsdF9jb3VudCsrOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgIGx0X2NvdW50LS07CistICAgICAgICB9CistICAgICAgfQorLSAgICB9CistICB9CistICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKy0gIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorLX0nYAorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKKy1lbHNlCistICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCistZmldKQorLWxpYnJhcnlfbmFtZXNfc3BlYz0KKy1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJworLXNvbmFtZV9zcGVjPQorLXNocmV4dF9jbWRzPSIuc28iCistcG9zdGluc3RhbGxfY21kcz0KKy1wb3N0dW5pbnN0YWxsX2NtZHM9CistZmluaXNoX2NtZHM9CistZmluaXNoX2V2YWw9Cistc2hsaWJwYXRoX3Zhcj0KKy1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgorLXZlcnNpb25fdHlwZT1ub25lCistZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorLW5lZWRfbGliX3ByZWZpeD11bmtub3duCistaGFyZGNvZGVfaW50b19saWJzPW5vCistCistIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCistIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCistbmVlZF92ZXJzaW9uPXVua25vd24KKy0KKy1jYXNlICRob3N0X29zIGluCistYWl4MyopCistICB2ZXJzaW9uX3R5cGU9bGludXgKKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICistCistICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgOzsKKy0KKy1haXhbWzQtOV1dKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKy0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKy0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIGVsc2UKKy0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCistICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKy0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKy0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCistICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKy0JICAgZWNobyAnIHllcyAnCistCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCistCToKKy0gICAgICBlbHNlCistCWNhbl9idWlsZF9zaGFyZWQ9bm8KKy0gICAgICBmaQorLSAgICAgIDs7CistICAgIGVzYWMKKy0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCistICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCistICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CistICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworLSAgICBlbHNlCistICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKy0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKy0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKy0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgICBmaQorLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKy0gIGZpCistICA7OworLQorLWFtaWdhb3MqKQorLSAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gIHBvd2VycGMpCistICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKy0gICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKy0gICAgOzsKKy0gIG02OGspCistICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCistICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCistICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCistICAgIDs7CistICBlc2FjCistICA7OworLQorLWJlb3MqKQorLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKy0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKy0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICistICA7OworLQorLWJzZGlbWzQ1XV0qKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CistICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCistICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CistICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKy0gIDs7CistCistY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKy0gIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgbmVlZF92ZXJzaW9uPW5vCistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0KKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCistICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CistICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKy0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorLSAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCistICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKy0gICAgICBmaScKKy0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKy0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorLSAgICAgICAkUk0gXCRkbHBhdGgnCistICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0KKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICBjeWd3aW4qKQorLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKy0gICAgICA7OworLSAgICBtaW5ndyopCistICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKy0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKy0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCAkR1JFUCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorLSAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCistICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKy0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKKy0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKy0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKy0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKKy0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKy0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCistICAgICAgZWxzZQorLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKy0gICAgICBmaQorLSAgICAgIDs7CistICAgIHB3MzIqKQorLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworLSAgICAgIDs7CistICAgIGVzYWMKKy0gICAgOzsKKy0KKy0gICopCistICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCistICAgIDs7CistICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCistICBzaGxpYnBhdGhfdmFyPVBBVEgKKy0gIDs7CistCistZGFyd2luKiB8IHJoYXBzb2R5KikKKy0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorLSAgdmVyc2lvbl90eXBlPWRhcndpbgorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKy0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCistICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICistICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKy1tNF9pZihbJDFdLCBbXSxbCistICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworLSAgOzsKKy0KKy1kZ3V4KikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKy0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgOzsKKy0KKy1mcmVlYnNkMSopCistICBkeW5hbWljX2xpbmtlcj1ubworLSAgOzsKKy0KKy1mcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CistICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKy0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCistICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorLSAgZWxzZQorLSAgICBjYXNlICRob3N0X29zIGluCistICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKKy0gICAgKikgb2JqZm9ybWF0PWVsZiA7OworLSAgICBlc2FjCistICBmaQorLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCistICAgIGZyZWVic2QtZWxmKikKKy0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKy0gICAgICBuZWVkX3ZlcnNpb249bm8KKy0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gICAgICA7OworLSAgICBmcmVlYnNkLSopCistICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCistICAgICAgbmVlZF92ZXJzaW9uPXllcworLSAgICAgIDs7CistICBlc2FjCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgZnJlZWJzZDIqKQorLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICAgIDs7CistICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKy0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistICAgIDs7CistICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorLSAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCistICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistICAgIDs7CistICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CistICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcworLSAgICA7OworLSAgZXNhYworLSAgOzsKKy0KKy1nbnUqKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gIG5lZWRfdmVyc2lvbj1ubworLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICistICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistICA7OworLQorLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCistICB2ZXJzaW9uX3R5cGU9c3Vub3MKKy0gIG5lZWRfbGliX3ByZWZpeD1ubworLSAgbmVlZF92ZXJzaW9uPW5vCistICBjYXNlICRob3N0X2NwdSBpbgorLSAgaWE2NCopCistICAgIHNocmV4dF9jbWRzPScuc28nCistICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKy0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKy0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKy0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKy0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCistICAgIGVsc2UKKy0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCistICAgIGZpCistICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKy0gICAgOzsKKy0gIGhwcGEqNjQqKQorLSAgICBzaHJleHRfY21kcz0nLnNsJworLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCistICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCistICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCistICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKy0gICAgOzsKKy0gICopCistICAgIHNocmV4dF9jbWRzPScuc2wnCistICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCistICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKy0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gICAgOzsKKy0gIGVzYWMKKy0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCistICA7OworLQorLWludGVyaXhbWzMtOV1dKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCistICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistICA7OworLQorLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCistICBjYXNlICRob3N0X29zIGluCistICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKy0gICAgKikKKy0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorLQkJdmVyc2lvbl90eXBlPWxpbnV4CistCWVsc2UKKy0JCXZlcnNpb25fdHlwZT1pcml4CistCWZpIDs7CistICBlc2FjCistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gIG5lZWRfdmVyc2lvbj1ubworLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKy0gIGNhc2UgJGhvc3Rfb3MgaW4KKy0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCistICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKy0gICAgOzsKKy0gICopCistICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKy0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKy0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CistICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCistICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CistICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CistICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworLSAgICBlc2FjCistICAgIDs7CistICBlc2FjCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCistICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorLSAgaGFyZGNvZGVfaW50b19saWJzPXllcworLSAgOzsKKy0KKy0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCistbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKy0gIGR5bmFtaWNfbGlua2VyPW5vCistICA7OworLQorLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eCogfCBrKmJzZCotZ251KQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gIG5lZWRfdmVyc2lvbj1ubworLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKy0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICistICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKy0gICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorLSAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCistICBzYXZlX2xpYmRpcj0kbGliZGlyCistICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorLSAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorLSAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorLSAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorLSAgICAgICBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKy0gIExERkxBR1M9JHNhdmVfTERGTEFHUworLSAgbGliZGlyPSRzYXZlX2xpYmRpcgorLQorLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCistICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKy0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCistICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistCistICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKy0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKy0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorLSAgZmkKKy0KKy0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCistICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCistICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKy0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCistICA7OworLQorLW5ldGJzZGVsZiotZ251KQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gIG5lZWRfdmVyc2lvbj1ubworLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKy0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCistICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCistICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKy0gIDs7CistCistbmV0YnNkKikKKy0gIHZlcnNpb25fdHlwZT1zdW5vcworLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCistICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCistICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCistICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKy0gIGVsc2UKKy0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKy0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCistICBmaQorLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKy0gIDs7CistCistbmV3c29zNikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgOzsKKy0KKy0qbnRvKiB8ICpxbngqKQorLSAgdmVyc2lvbl90eXBlPXFueAorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICistICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKy0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKy0gIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKy0gIDs7CistCistb3BlbmJzZCopCistICB2ZXJzaW9uX3R5cGU9c3Vub3MKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKy0gIG5lZWRfbGliX3ByZWZpeD1ubworLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CistICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKy0gIGVzYWMKKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCistICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKy0JOzsKKy0gICAgICAqKQorLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistCTs7CistICAgICAgZXNhYworLSAgZWxzZQorLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBmaQorLSAgOzsKKy0KKy1vczIqKQorLSAgbGlibmFtZV9zcGVjPSckbmFtZScKKy0gIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICistICA7OworLQorLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKy0gIHZlcnNpb25fdHlwZT1vc2YKKy0gIG5lZWRfbGliX3ByZWZpeD1ubworLSAgbmVlZF92ZXJzaW9uPW5vCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorLSAgOzsKKy0KKy1yZG9zKikKKy0gIGR5bmFtaWNfbGlua2VyPW5vCistICA7OworLQorLXNvbGFyaXMqKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gIG5lZWRfdmVyc2lvbj1ubworLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKy0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCistICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworLSAgOzsKKy0KKy1zdW5vczQqKQorLSAgdmVyc2lvbl90eXBlPXN1bm9zCistICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKy0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICistICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICAgIG5lZWRfbGliX3ByZWZpeD1ubworLSAgZmkKKy0gIG5lZWRfdmVyc2lvbj15ZXMKKy0gIDs7CistCistc3lzdjQgfCBzeXN2NC4zKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCistICAgIHNuaSkKKy0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKy0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorLSAgICAgIDs7CistICAgIHNpZW1lbnMpCistICAgICAgbmVlZF9saWJfcHJlZml4PW5vCistICAgICAgOzsKKy0gICAgbW90b3JvbGEpCistICAgICAgbmVlZF9saWJfcHJlZml4PW5vCistICAgICAgbmVlZF92ZXJzaW9uPW5vCistICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCistICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKy0gICAgICA7OworLSAgZXNhYworLSAgOzsKKy0KKy1zeXN2NCpNUCopCistICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCistICAgIHZlcnNpb25fdHlwZT1saW51eAorLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKy0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIGZpCistICA7OworLQorLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCistICBuZWVkX2xpYl9wcmVmaXg9bm8KKy0gIG5lZWRfdmVyc2lvbj1ubworLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKy0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCistICBlbHNlCistICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworLSAgICBjYXNlICRob3N0X29zIGluCistICAgICAgc2NvMy4ydjUqKQorLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCistCTs7CistICAgIGVzYWMKKy0gIGZpCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCistICA7OworLQorLXRwZiopCistICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCistICB2ZXJzaW9uX3R5cGU9bGludXgKKy0gIG5lZWRfbGliX3ByZWZpeD1ubworLSAgbmVlZF92ZXJzaW9uPW5vCistICBsaWJyYXJ5X25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworLSAgaGFyZGNvZGVfaW50b19saWJzPXllcworLSAgOzsKKy0KKy11dHM0KikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCistICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKy0gIDs7CistCistKikKKy0gIGR5bmFtaWNfbGlua2VyPW5vCistICA7OworLWVzYWMKKy1BQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQorLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCistCistdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgorLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKKy1maQorLSAKKy1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorLWZpCistaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKKy1maQorLQorLV9MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCistICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKy0gICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKKy1fTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKy0gICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorLV9MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorLV9MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorLV9MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKKy1fTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorLV9MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorLSAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCistX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCistX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCistICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKy0gICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorLV9MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCistICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKKy1fTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCistICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCistX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCistICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKKy1fTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorLSAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKKy1fTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorLSAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorLSAgICBub3Qgc2hvd25dXSkKKy1fTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKy0gICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorLV9MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorLSAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKKy1fTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorLSAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorLV0pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCistCistCistIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorLUFDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCistW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCistQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorLVtjYXNlICRNQUdJQ19DTUQgaW4KKy1bW1xcLypdIHwgID86W1xcL10qXSkKKy0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKy0gIDs7CistKikKKy0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCistZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorLWRubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCistICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCistICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKy0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgorLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKy0JY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKy0JImZpbGVfbWFnaWMgIiopCistCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCistCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCistCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorLQkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JICAgIDoKKy0JICBlbHNlCistCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKy0KKy0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorLSoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKy0qKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKy0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKy0qKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKy0qKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CistKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworLSoqKiBidWctbGlidG9vbEBnbnUub3JnCistCistX0xUX0VPRgorLQkgIGZpIDs7CistCWVzYWMKKy0gICAgICBmaQorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRsdF9zYXZlX2lmcyIKKy0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorLSAgOzsKKy1lc2FjXSkKKy1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKy1pZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorLSAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorLWVsc2UKKy0gIEFDX01TR19SRVNVTFQobm8pCistZmkKKy1fTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKy0JIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKKy1dKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKy0KKy0jIE9sZCBuYW1lOgorLUFVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCistCistCistIyBfTFRfUEFUSF9NQUdJQworLSMgLS0tLS0tLS0tLS0tLS0KKy0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CistbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKKy1bX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKy0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKy0gIGVsc2UKKy0gICAgTUFHSUNfQ01EPToKKy0gIGZpCistZmkKKy1dKSMgX0xUX1BBVEhfTUFHSUMKKy0KKy0KKy0jIExUX1BBVEhfTEQKKy0jIC0tLS0tLS0tLS0KKy0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKKy1BQ19ERUZVTihbTFRfUEFUSF9MRF0sCistW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKy1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCistbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorLQorLUFDX0FSR19XSVRIKFtnbnUtbGRdLAorLSAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAorLQlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKy0gICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCistICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCistCistYWNfcHJvZz1sZAorLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKy0gIGNhc2UgJGhvc3QgaW4KKy0gICotKi1taW5ndyopCistICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKy0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworLSAgKikKKy0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworLSAgZXNhYworLSAgY2FzZSAkYWNfcHJvZyBpbgorLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKy0gICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorLSAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCistICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCistICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCistICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworLQlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKy0gICAgICBkb25lCistICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCistICAgICAgOzsKKy0gICIiKQorLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKy0gICAgYWNfcHJvZz1sZAorLSAgICA7OworLSAgKikKKy0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorLSAgICB3aXRoX2dudV9sZD11bmtub3duCistICAgIDs7CistICBlc2FjCistZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorLWVsc2UKKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorLWZpCistQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCistW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKy0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKy0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCistICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCistICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCistICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCistICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCistCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKy0JOzsKKy0gICAgICAqKQorLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworLQk7OworLSAgICAgIGVzYWMKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGx0X3NhdmVfaWZzIgorLWVsc2UKKy0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCistZmldKQorLUxEPSIkbHRfY3ZfcGF0aF9MRCIKKy1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCistICBBQ19NU0dfUkVTVUxUKCRMRCkKKy1lbHNlCistICBBQ19NU0dfUkVTVUxUKG5vKQorLWZpCistdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKKy1fTFRfUEFUSF9MRF9HTlUKKy1BQ19TVUJTVChbTERdKQorLQorLV9MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKKy1dKSMgTFRfUEFUSF9MRAorLQorLSMgT2xkIG5hbWVzOgorLUFVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorLUFVX0FMSUFTKFtBQ19QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKKy1kbmwgQUNfREVGVU4oW0FDX1BST0dfTERdLCBbXSkKKy0KKy0KKy0jIF9MVF9QQVRIX0xEX0dOVQorLSMtIC0tLS0tLS0tLS0tLS0tCistbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCistW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGx0X2N2X3Byb2dfZ251X2xkLAorLVsjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCistY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKy0qR05VKiB8ICond2l0aCBCRkQnKikKKy0gIGx0X2N2X3Byb2dfZ251X2xkPXllcworLSAgOzsKKy0qKQorLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKy0gIDs7CistZXNhY10pCistd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCistXSkjIF9MVF9QQVRIX0xEX0dOVQorLQorLQorLSMgX0xUX0NNRF9SRUxPQUQKKy0jIC0tLS0tLS0tLS0tLS0tCistIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKy0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KKy1tNF9kZWZ1bihbX0xUX0NNRF9SRUxPQURdLAorLVtBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCistICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKKy0gIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKKy1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKKy1jYXNlICRyZWxvYWRfZmxhZyBpbgorLSIiIHwgIiAiKikgOzsKKy0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKKy1lc2FjCistcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworLWNhc2UgJGhvc3Rfb3MgaW4KKy0gIGRhcndpbiopCistICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworLSAgICBlbHNlCistICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworLSAgICBmaQorLSAgICA7OworLWVzYWMKKy1fTFRfREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCistX0xUX0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKKy1dKSMgX0xUX0NNRF9SRUxPQUQKKy0KKy0KKy0jIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKy0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCistbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAorLVttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCistQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCistbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCistW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworLWx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorLSMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKy0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKy0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKy0jICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCistIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKy0jIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCistCistY2FzZSAkaG9zdF9vcyBpbgorLWFpeFtbNC05XV0qKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CistCistYmVvcyopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKy0KKy1ic2RpW1s0NV1dKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKy0gIDs7CistCistY3lnd2luKikKKy0gICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCistICA7OworLQorLW1pbmd3KiB8IHB3MzIqKQorLSAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorLSAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCistICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorLSAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKy0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCistICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCistICBmaQorLSAgOzsKKy0KKy1kYXJ3aW4qIHwgcmhhcHNvZHkqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CistCistZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCistICAgIGNhc2UgJGhvc3RfY3B1IGluCistICAgIGkqODYgKQorLSAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCistICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKy0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKy0gICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCistICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorLSAgICAgIDs7CistICAgIGVzYWMKKy0gIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIGZpCistICA7OworLQorLWdudSopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKy0KKy1ocHV4MTAuMjAqIHwgaHB1eDExKikKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKy0gIGNhc2UgJGhvc3RfY3B1IGluCistICBpYTY0KikKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworLSAgICA7OworLSAgaHBwYSo2NCopCistICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorLSAgICA7OworLSAgKikKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV0uW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKy0gICAgOzsKKy0gIGVzYWMKKy0gIDs7CistCistaW50ZXJpeFtbMy05XV0qKQorLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKy0gIDs7CistCistaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKy0gIGNhc2UgJExEIGluCistICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CistICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKy0gICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKy0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKy0gIGVzYWMKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworLQorLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eCogfCBrKmJzZCotZ251KQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CistCistbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCistICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworLSAgZmkKKy0gIDs7CistCistbmV3b3M2KikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworLSAgOzsKKy0KKy0qbnRvKiB8ICpxbngqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CistCistb3BlbmJzZCopCistICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKy0gIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKy0gIGZpCistICA7OworLQorLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworLQorLXJkb3MqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CistCistc29sYXJpcyopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKy0KKy1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworLQorLXN5c3Y0IHwgc3lzdjQuMyopCistICBjYXNlICRob3N0X3ZlbmRvciBpbgorLSAgbW90b3JvbGEpCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKKy0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCistICAgIDs7CistICBuY3IpCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICAgIDs7CistICBzZXF1ZW50KQorLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworLSAgICA7OworLSAgc25pKQorLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKKy0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCistICAgIDs7CistICBzaWVtZW5zKQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgICA7OworLSAgcGMpCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICAgIDs7CistICBlc2FjCistICA7OworLQorLXRwZiopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKy1lc2FjCistXSkKKy1maWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKy1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKy10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKy0KKy1fTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorLSAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorLV9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCistICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCistXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKy0KKy0KKy0jIExUX1BBVEhfTk0KKy0jIC0tLS0tLS0tLS0KKy0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCistQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKy1BQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKKy1baWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorLSAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistICBsdF9jdl9wYXRoX05NPSIkTk0iCistZWxzZQorLSAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCistICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCistICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCistICBmaQorLSAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCistICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLSAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCistICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKy0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCistCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorLQkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCistCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorLQljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKy0JKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorLQkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCistCSAgYnJlYWsKKy0JICA7OworLQkqKQorLQkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorLQkgICovZGV2L251bGwqKQorLQkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKy0JICAgIGJyZWFrCistCSAgICA7OworLQkgICopCistCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorLQkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKy0JICAgIDs7CistCSAgZXNhYworLQkgIDs7CistCWVzYWMKKy0gICAgICBmaQorLSAgICBkb25lCistICAgIElGUz0iJGx0X3NhdmVfaWZzIgorLSAgZG9uZQorLSAgOiAke2x0X2N2X3BhdGhfTk09bm99CistZmldKQorLWlmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCistICBOTT0iJGx0X2N2X3BhdGhfTk0iCistZWxzZQorLSAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCistICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbImR1bXBiaW4gLXN5bWJvbHMiICJsaW5rIC1kdW1wIC1zeW1ib2xzIl0sIDopCistICBBQ19TVUJTVChbRFVNUEJJTl0pCistICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCistICAgIE5NPSIkRFVNUEJJTiIKKy0gIGZpCistZmkKKy10ZXN0IC16ICIkTk0iICYmIE5NPW5tCistQUNfU1VCU1QoW05NXSkKKy1fTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorLQorLUFDX0NBQ0hFX0NIRUNLKFt0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sCistICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCistICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKy0gIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCistICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECistICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCistICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogb3V0cHV0XCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCistICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKy0gIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCistICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKy0gIGZpCistICBybSAtZiBjb25mdGVzdCpdKQorLV0pIyBMVF9QQVRIX05NCistCistIyBPbGQgbmFtZXM6CistQVVfQUxJQVMoW0FNX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCistQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCistZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorLWRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorLWRubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorLQorLQorLSMgTFRfTElCX00KKy0jIC0tLS0tLS0tCistIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CistQUNfREVGVU4oW0xUX0xJQl9NXSwKKy1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorLUxJQk09CistY2FzZSAkaG9zdCBpbgorLSotKi1iZW9zKiB8ICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCistICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKy0gIDs7CistKi1uY3Itc3lzdjQuMyopCistICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKy0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCistICA7OworLSopCistICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorLSAgOzsKKy1lc2FjCistQUNfU1VCU1QoW0xJQk1dKQorLV0pIyBMVF9MSUJfTQorLQorLSMgT2xkIG5hbWU6CistQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKy0KKy0KKy0jIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorLVttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKy0KKy1fTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CistCistaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0gIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKy0KKy0gIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKKy0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCistICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCistICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQorLWZpCistX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKy0JW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQorLV0pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorLQorLQorLSMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKKy1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorLUFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorLUFDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCistbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorLQorLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCistQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKKy1BQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorLVsKKy0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKy0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorLQorLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KKy1zeW1jb2RlPSdbW0JDREVHUlNUXV0nCistCistIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCistc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCistCistIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KKy1jYXNlICRob3N0X29zIGluCistYWl4KikKKy0gIHN5bWNvZGU9J1tbQkNEVF1dJworLSAgOzsKKy1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCistICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworLSAgOzsKKy1ocHV4KikKKy0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCistICBmaQorLSAgOzsKKy1pcml4KiB8IG5vbnN0b3B1eCopCistICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCistICA7OworLW9zZiopCistICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworLSAgOzsKKy1zb2xhcmlzKikKKy0gIHN5bWNvZGU9J1tbQkRSVF1dJworLSAgOzsKKy1zY28zLjJ2NSopCistICBzeW1jb2RlPSdbW0RUXV0nCistICA7OworLXN5c3Y0LjJ1dzIqKQorLSAgc3ltY29kZT0nW1tEVF1dJworLSAgOzsKKy1zeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorLSAgc3ltY29kZT0nW1tBQkRUXV0nCistICA7OworLXN5c3Y0KQorLSAgc3ltY29kZT0nW1tERk5TVFVdXScKKy0gIDs7CistZXNhYworLQorLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorLWNhc2UgYCROTSAtViAyPiYxYCBpbgorLSpHTlUqIHwgKid3aXRoIEJGRCcqKQorLSAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7CistZXNhYworLQorLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCistIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCistIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCistCistIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistCistIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCistb3B0X2NyPQorLWNhc2UgJGJ1aWxkX29zIGluCistbWluZ3cqKQorLSAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorLSAgOzsKKy1lc2FjCistCistIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCistZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworLQorLSAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKy0gIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCistCistICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCistICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorLSAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorLSAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKy0gICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKy0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCistIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCistIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCistIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKy0iICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCistIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCistIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCistIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKy0iICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKy0iICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKy0iICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKy0gIGVsc2UKKy0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKy0gIGZpCistCistICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKy0gIHBpcGVfd29ya3M9bm8KKy0KKy0gIHJtIC1mIGNvbmZ0ZXN0KgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsKKy0jZW5kaWYKKy1jaGFyIG5tX3Rlc3RfdmFyOworLXZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOworLXZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KKy1fTFRfRU9GCistCistICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorLSAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKy0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KKy0gICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKy0gICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCistCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorLSAgICAgIGVsc2UKKy0Jcm0gLWYgIiRubGlzdCJUCistICAgICAgZmkKKy0KKy0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCistICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKy0JaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCistCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsKKy0jZW5kaWYKKy0KKy1fTFRfRU9GCistCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCistCistCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CistCistLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CistICBjb25zdCBjaGFyICpuYW1lOworLSAgdm9pZCAgICAgICAqYWRkcmVzczsKKy19CistbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQorLXsKKy0gIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKKy1fTFRfRU9GCistCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CistCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorLSAgezAsICh2b2lkICopIDB9CistfTsKKy0KKy0vKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKy0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECistc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKy0gIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworLX0KKy0jZW5kaWYKKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistX0xUX0VPRgorLQkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCistCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKy0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorLQkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCistCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLQkgICAgcGlwZV93b3Jrcz15ZXMKKy0JICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCistCWVsc2UKKy0JICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECistCWZpCistICAgICAgZWxzZQorLQllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorLSAgICBmaQorLSAgZWxzZQorLSAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKy0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBmaQorLSAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorLQorLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorLSAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCistICAgIGJyZWFrCistICBlbHNlCistICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CistICBmaQorLWRvbmUKKy1dKQorLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CistZmkKKy1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKy0gIEFDX01TR19SRVNVTFQoZmFpbGVkKQorLWVsc2UKKy0gIEFDX01TR19SRVNVTFQob2spCistZmkKKy0KKy1fTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCistICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKKy1fTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKy0gICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKy0gICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorLSAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKKy1fTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKy0gICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCistICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCistXSkgIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCistCistCistIyBfTFRfQ09NUElMRVJfUElDKFtUQUdOQU1FXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKKy1bbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCistX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CistX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorLV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKKy1tNF9pZihbJDFdLCBbQ1hYXSwgWworLSAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCistICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKy0KKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICBhaXgqKQorLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKy0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworLSAgICAgIGZpCistICAgICAgOzsKKy0KKy0gICAgYW1pZ2FvcyopCistICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gICAgICBwb3dlcnBjKQorLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworLSAgICAgICAgOzsKKy0gICAgICBtNjhrKQorLSAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKy0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKy0gICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorLSAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworLSAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0KKy0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorLSAgICAgIDs7CistICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiopCistICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCistICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCistICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorLQlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKy0gICAgICA7OworLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKy0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKy0gICAgICA7OworLSAgICAqZGpncHAqKQorLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKy0gICAgICA7OworLSAgICBpbnRlcml4W1szLTldXSopCistICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKy0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKy0gICAgICA7OworLSAgICBzeXN2NCpNUCopCistICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworLSAgICAgIGZpCistICAgICAgOzsKKy0gICAgaHB1eCopCistICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CistICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCistICAgICAgaHBwYSo2NCp8aWE2NCopCistCTs7CistICAgICAgKikKKy0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKy0JOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0gICAgKnFueCogfCAqbnRvKikKKy0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorLSAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCistICAgICAgOzsKKy0gICAgKikKKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworLSAgICAgIDs7CistICAgIGVzYWMKKy0gIGVsc2UKKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICAgIGFpeFtbNC05XV0qKQorLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCistCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKy0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworLQllbHNlCistCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCistCWZpCistCTs7CistICAgICAgY2hvcnVzKikKKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JY3hjaDY4KikKKy0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorLQkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCistCSAgOzsKKy0JZXNhYworLQk7OworLSAgICAgIGRndXgqKQorLQljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIGVjKysqKQorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKy0JICAgIDs7CistCSAgZ2hjeCopCistCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworLQkgICAgOzsKKy0JICAqKQorLQkgICAgOzsKKy0JZXNhYworLQk7OworLSAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKworLQk7OworLSAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorLQljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKy0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorLQkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworLQkgICAgZmkKKy0JICAgIDs7CistCSAgYUNDKikKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKy0JICAgIGNhc2UgJGhvc3RfY3B1IGluCistCSAgICBocHBhKjY0KnxpYTY0KikKKy0JICAgICAgIyArWiB0aGUgZGVmYXVsdAorLQkgICAgICA7OworLQkgICAgKikKKy0JICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKy0JICAgIDs7CistCSAgKikKKy0JICAgIDs7CistCWVzYWMKKy0JOzsKKy0gICAgICBpbnRlcml4KikKKy0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCistCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKy0JOzsKKy0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorLQljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKy0JICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCistCSAgICA7OworLQkgICopCistCSAgICA7OworLQllc2FjCistCTs7CistICAgICAgbGludXgqIHwgaypic2QqLWdudSkKKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBLQ0MqKQorLQkgICAgIyBLQUkgQysrIENvbXBpbGVyCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworLQkgICAgOzsKKy0JICBpY3BjKiB8IGVjcGMqICkKKy0JICAgICMgSW50ZWwgQysrCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCistCSAgICA7OworLQkgIHBnQ0MqIHwgcGdjcHAqKQorLQkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistCSAgICA7OworLQkgIGN4eCopCistCSAgICAjIENvbXBhcSBDKysKKy0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKy0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCistCSAgICA7OworLQkgIHhsYyogfCB4bEMqKQorLQkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCistCSAgICA7OworLQkgICopCistCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKy0JICAgICpTdW5cIEMqKQorLQkgICAgICAjIFN1biBDKysgNS45CistCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCistCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCistCSAgICAgIDs7CistCSAgICBlc2FjCistCSAgICA7OworLQllc2FjCistCTs7CistICAgICAgbHlueG9zKikKKy0JOzsKKy0gICAgICBtODhrKikKKy0JOzsKKy0gICAgICBtdnMqKQorLQljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIGN4eCopCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworLQkgICAgOzsKKy0JICAqKQorLQkgICAgOzsKKy0JZXNhYworLQk7OworLSAgICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKy0JOzsKKy0gICAgICAqcW54KiB8ICpudG8qKQorLSAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKy0gICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKy0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKy0gICAgICAgIDs7CistICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorLQljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIEtDQyopCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCistCSAgICA7OworLQkgIFJDQyopCistCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworLQkgICAgOzsKKy0JICBjeHgqKQorLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKy0JICAgIDs7CistCSAgKikKKy0JICAgIDs7CistCWVzYWMKKy0JOzsKKy0gICAgICBwc29zKikKKy0JOzsKKy0gICAgICBzb2xhcmlzKikKKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBDQyopCistCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCistCSAgICA7OworLQkgIGdjeCopCistCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworLQkgICAgOzsKKy0JICAqKQorLQkgICAgOzsKKy0JZXNhYworLQk7OworLSAgICAgIHN1bm9zNCopCistCWNhc2UgJGNjX2Jhc2VuYW1lIGluCistCSAgQ0MqKQorLQkgICAgIyBTdW4gQysrIDQueAorLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKy0JICAgIDs7CistCSAgbGNjKikKKy0JICAgICMgTHVjaWQKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKy0JICAgIDs7CistCSAgKikKKy0JICAgIDs7CistCWVzYWMKKy0JOzsKKy0gICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorLQljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKy0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistCSAgICA7OworLQllc2FjCistCTs7CistICAgICAgdGFuZGVtKikKKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBOQ0MqKQorLQkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCistCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworLQkgICAgOzsKKy0JICAqKQorLQkgICAgOzsKKy0JZXNhYworLQk7OworLSAgICAgIHZ4d29ya3MqKQorLQk7OworLSAgICAgICopCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKy0JOzsKKy0gICAgZXNhYworLSAgZmkKKy1dLAorLVsKKy0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCistCistICAgIGNhc2UgJGhvc3Rfb3MgaW4KKy0gICAgICBhaXgqKQorLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKy0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworLSAgICAgIGZpCistICAgICAgOzsKKy0KKy0gICAgYW1pZ2FvcyopCistICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gICAgICBwb3dlcnBjKQorLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworLSAgICAgICAgOzsKKy0gICAgICBtNjhrKQorLSAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKy0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKy0gICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorLSAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworLSAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0KKy0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorLSAgICAgIDs7CistCistICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCistICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCistICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCistICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorLQlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKy0gICAgICA7OworLQorLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKy0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKy0gICAgICA7OworLQorLSAgICBocHV4KikKKy0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKy0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCistICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gICAgICBocHBhKjY0KnxpYTY0KikKKy0JIyArWiB0aGUgZGVmYXVsdAorLQk7OworLSAgICAgICopCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCistCTs7CistICAgICAgZXNhYworLSAgICAgIDs7CistCistICAgIGludGVyaXhbWzMtOV1dKikKKy0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorLSAgICAgIDs7CistCistICAgIG1zZG9zZGpncHAqKQorLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCistICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKy0gICAgICBlbmFibGVfc2hhcmVkPW5vCistICAgICAgOzsKKy0KKy0gICAgKm50byogfCAqcW54KikKKy0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorLSAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCistICAgICAgOzsKKy0KKy0gICAgc3lzdjQqTVAqKQorLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKy0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKy0gICAgICBmaQorLSAgICAgIDs7CistCistICAgICopCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKy0gICAgICA7OworLSAgICBlc2FjCistICBlbHNlCistICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICBhaXgqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKy0gICAgICBmaQorLSAgICAgIDs7CistCistICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCistICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCistICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorLQlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKy0gICAgICA7OworLQorLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKy0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKy0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCistICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gICAgICBocHBhKjY0KnxpYTY0KikKKy0JIyArWiB0aGUgZGVmYXVsdAorLQk7OworLSAgICAgICopCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCistCTs7CistICAgICAgZXNhYworLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCistICAgICAgOzsKKy0KKy0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKy0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKy0gICAgICA7OworLQorLSAgICBsaW51eCogfCBrKmJzZCotZ251KQorLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgaWNjKiB8IGVjYyogfCBpZm9ydCopCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCistICAgICAgICA7OworLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKy0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKy0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistICAgICAgICA7OworLSAgICAgIGNjYyopCistICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKy0gICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorLSAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKy0gICAgICAgIDs7CistICAgICAgeGwqKQorLQkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEgb24gUFBDCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKy0JOzsKKy0gICAgICAqKQorLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKy0JKlN1blwgQyopCistCSAgIyBTdW4gQyA1LjkKKy0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCistCSAgOzsKKy0JKlN1blwgRiopCistCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCistCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKy0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworLQkgIDs7CistCWVzYWMKKy0JOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0KKy0gICAgbmV3c29zNikKKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistICAgICAgOzsKKy0KKy0gICAgKm50byogfCAqcW54KikKKy0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorLSAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCistICAgICAgOzsKKy0KKy0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCistICAgICAgOzsKKy0KKy0gICAgcmRvcyopCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKy0gICAgICA7OworLQorLSAgICBzb2xhcmlzKikKKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKy0gICAgICAqKQorLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworLSAgICAgIGVzYWMKKy0gICAgICA7OworLQorLSAgICBzdW5vczQqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistICAgICAgOzsKKy0KKy0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKy0gICAgICA7OworLQorLSAgICBzeXN2NCpNUCopCistICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCistCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKy0gICAgICA7OworLQorLSAgICB1bmljb3MqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKy0gICAgICA7OworLQorLSAgICB1dHM0KikKKy0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCistICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKy0gICAgICA7OworLQorLSAgICAqKQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKy0gICAgICA7OworLSAgICBlc2FjCistICBmaQorLV0pCistY2FzZSAkaG9zdF9vcyBpbgorLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CistICAqZGpncHAqKQorLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CistICAgIDs7CistICAqKQorLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKy0gICAgOzsKKy1lc2FjCistQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCistX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCistCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKy0KKy0jCistIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorLSMKKy1pZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorLSAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorLSAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKy0gICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorLSAgICBbY2FzZSAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCistICAgICAiIiB8ICIgIiopIDs7CistICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworLSAgICAgZXNhY10sCistICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CistICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKKy1maQorLV9MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKy0JW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCistCistIworLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKy0jCistd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCistX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKy0gIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKy0gICRsdF90bXBfc3RhdGljX2ZsYWcsCistICBbXSwKKy0gIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKKy1fTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKy0JW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorLV0pIyBfTFRfQ09NUElMRVJfUElDCistCistCistIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorLW00X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCistW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorLUFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKy1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorLW00X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKy1tNF9pZihbJDFdLCBbQ1hYXSwgWworLSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIGNhc2UgJGhvc3Rfb3MgaW4KKy0gIGFpeFtbNC05XV0qKQorLSAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKy0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorLSAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCistICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKy0gICAgZWxzZQorLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworLSAgICBmaQorLSAgICA7OworLSAgcHczMiopCistICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKy0gIDs7CistICBjeWd3aW4qIHwgbWluZ3cqKQorLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworLSAgbGludXgqIHwgaypic2QqLWdudSkKKy0gICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKy0gIDs7CistICAqKQorLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKy0gIGVzYWMKKy0gIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorLV0sIFsKKy0gIHJ1bnBhdGhfdmFyPQorLSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorLSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKy0gIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorLSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworLSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKy0gIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CistICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CistICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KKy0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKy0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCistICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworLSAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorLSAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorLSAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKy0gIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorLSAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQorLSAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKy0gIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKy0gICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKy0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CistICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKy0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKy0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKy0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCistICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKy0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CistICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKy0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCistICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCistZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCistICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKy0KKy0gIGNhc2UgJGhvc3Rfb3MgaW4KKy0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKy0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKy0gICAgICB3aXRoX2dudV9sZD1ubworLSAgICBmaQorLSAgICA7OworLSAgaW50ZXJpeCopCistICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCistICAgIHdpdGhfZ251X2xkPXllcworLSAgICA7OworLSAgb3BlbmJzZCopCistICAgIHdpdGhfZ251X2xkPW5vCistICAgIDs7CistICBlc2FjCistCistICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorLSAgICB3bGFyYz0nJHt3bH0nCistCistICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCistICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCistICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICistICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCistICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKy0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCistICAgIGVsc2UKKy0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CistICAgIGZpCistICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworLSAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKy0gICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCistICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCistICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworLSAgICBlc2FjCistCistICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorLSAgICBjYXNlICRob3N0X29zIGluCistICAgIGFpeFtbMy05XV0qKQorLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKy0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKy0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQljYXQgPDxfTFRfRU9GIDE+JjIKKy0KKy0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCistKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCistKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CistKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCistCistX0xUX0VPRgorLSAgICAgIGZpCistICAgICAgOzsKKy0KKy0gICAgYW1pZ2FvcyopCistICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gICAgICBwb3dlcnBjKQorLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworLSAgICAgICAgOzsKKy0gICAgICBtNjhrKQorLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCistICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKy0gICAgICAgIDs7CistICAgICAgZXNhYworLSAgICAgIDs7CistCistICAgIGJlb3MqKQorLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKy0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCistICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKy0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCistICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0KKy0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCistICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKy0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistCWVsc2UKKy0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQlmaX4KKy0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBpbnRlcml4W1szLTldXSopCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCistICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKy0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCistICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKy0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCistICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCistICAgICAgOzsKKy0KKy0gICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251KQorLSAgICAgIHRtcF9kaWV0PW5vCistICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKy0JZXNhYworLSAgICAgIGZpCistICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorLQkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCistICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKy0JdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCistCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorLSAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworLQkgIDs7CistCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKy0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKy0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKy0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CistCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworLQllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKy0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKy0JICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworLQl4bFtbY0NdXSopCQkJIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorLQkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworLQkgIHRtcF9hZGRmbGFnPSA7OworLQllc2FjCistCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCistCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKy0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CistCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCistCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworLQllc2FjCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCistICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworLSAgICAgICAgZmkKKy0KKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JeGxmKikKKy0JICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCistCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCistCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworLQkgIGZpCistCSAgOzsKKy0JZXNhYworLSAgICAgIGVsc2UKKy0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICBmaQorLSAgICAgIDs7CistCistICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKy0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworLQl3bGFyYz0KKy0gICAgICBlbHNlCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBzb2xhcmlzKikKKy0gICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKy0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQljYXQgPDxfTFRfRU9GIDE+JjIKKy0KKy0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorLSoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKy0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCistKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKy0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorLQorLV9MVF9FT0YKKy0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0gICAgICBlbHNlCistCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICBmaQorLSAgICAgIDs7CistCistICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCistICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCistICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCWNhdCA8PF9MVF9FT0YgMT4mMgorLQorLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CistKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCistKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CistKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKy0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKy0KKy1fTFRfRU9GCistCTs7CistCSopCistCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworLQkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCistCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKy0JICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCistCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0JICBlbHNlCistCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCSAgZmkKKy0JOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0KKy0gICAgc3Vub3M0KikKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworLSAgICAgIHdsYXJjPQorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICA7OworLQorLSAgICAqKQorLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0gICAgICBlbHNlCistCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICBmaQorLSAgICAgIDs7CistICAgIGVzYWMKKy0KKy0gICAgaWYgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KKy0gICAgICBydW5wYXRoX3Zhcj0KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKy0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorLSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorLSAgICBjYXNlICRob3N0X29zIGluCistICAgIGFpeDMqKQorLSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorLSAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCistICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKy0JIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCistCSMgYnJva2VuIGNvbGxlY3QyLgorLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBhaXhbWzQtOV1dKikKKy0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorLQkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CistCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCistCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCistCW5vX2VudHJ5X2ZsYWc9IiIKKy0gICAgICBlbHNlCistCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCistCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKy0JICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworLQllbHNlCistCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCistCWZpCistCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKy0KKy0JIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCistCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorLQljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCistCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCistCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKy0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCistCSAgICBicmVhaworLQkgIGZpCistCSAgZG9uZQorLQkgIDs7CistCWVzYWMKKy0KKy0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKy0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworLSAgICAgIGZpCistCistICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCistICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKy0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKy0KKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworLSAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCistCistICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCistCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKy0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCistCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKy0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKy0JICB0aGVuCistCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCistCSAgOgorLQkgIGVsc2UKKy0JICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorLQkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKy0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CistCSAgZmkKKy0JICA7OworLQllc2FjCistCXNoYXJlZF9mbGFnPSctc2hhcmVkJworLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKy0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKy0JZmkKKy0JX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKy0gICAgICBlbHNlCistCSMgbm90IHVzaW5nIGdjYworLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorLQkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorLQkgIHNoYXJlZF9mbGFnPSctRycKKy0JZWxzZQorLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCistCSAgZWxzZQorLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKy0JICBmaQorLQlmaQorLSAgICAgIGZpCistCistICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCistICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKy0gICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKy0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKy0gICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorLSAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKy0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorLSAgICAgIGVsc2UKKy0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKy0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCistCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCistCWVsc2UKKy0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorLQkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKy0JIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCistCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorLQkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKy0JICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCistCWZpCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBhbWlnYW9zKikKKy0gICAgICBjYXNlICRob3N0X2NwdSBpbgorLSAgICAgIHBvd2VycGMpCistICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCistICAgICAgICA7OworLSAgICAgIG02OGspCistICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworLSAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0KKy0gICAgYnNkaVtbNDVdXSopCistICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKy0gICAgICA7OworLQorLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCistICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKy0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKy0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworLSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYCRFQ0hPICJYJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBfTFRfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCistICAgICAgOzsKKy0KKy0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKy0gICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKy0gICAgICA7OworLQorLSAgICBkZ3V4KikKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworLSAgICAgIDs7CistCistICAgIGZyZWVic2QxKikKKy0gICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgOzsKKy0KKy0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCistICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworLSAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKy0gICAgIyBleHRyYSBzcGFjZSkuCistICAgIGZyZWVic2QyLjIqKQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgOzsKKy0KKy0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorLSAgICBmcmVlYnNkMiopCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgOzsKKy0KKy0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgOzsKKy0KKy0gICAgaHB1eDkqKQorLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKy0gICAgICBmaQorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKy0KKy0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCistICAgICAgOzsKKy0KKy0gICAgaHB1eDEwKikKKy0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworLSAgICAgIGZpCistICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKy0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKy0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKy0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKy0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKy0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKy0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworLSAgICAgIGZpCistICAgICAgOzsKKy0KKy0gICAgaHB1eDExKikKKy0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWNhc2UgJGhvc3RfY3B1IGluCistCWhwcGEqNjQqKQorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQkgIDs7CistCWlhNjQqKQorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQkgIDs7CistCSopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0JICA7OworLQllc2FjCistICAgICAgZWxzZQorLQljYXNlICRob3N0X2NwdSBpbgorLQlocHBhKjY0KikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCSAgOzsKKy0JaWE2NCopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQkgIDs7CistCSopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCSAgOzsKKy0JZXNhYworLSAgICAgIGZpCistICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKy0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorLQorLQljYXNlICRob3N0X2NwdSBpbgorLQlocHBhKjY0KnxpYTY0KikKKy0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0JICA7OworLQkqKQorLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKy0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworLQorLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCistCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCistCSAgOzsKKy0JZXNhYworLSAgICAgIGZpCistICAgICAgOzsKKy0KKy0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKy0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CistCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKy0JIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBBQ19MSU5LX0lGRUxTRShpbnQgZm9vKHZvaWQpIHt9LAorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0gICAgICAgICkKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistICAgICAgZmkKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorLSAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworLSAgICAgIDs7CistCistICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKy0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorLSAgICAgIGVsc2UKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCistICAgICAgZmkKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICA7OworLQorLSAgICBuZXdzb3M2KQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgOzsKKy0KKy0gICAgKm50byogfCAqcW54KikKKy0gICAgICA7OworLQorLSAgICBvcGVuYnNkKikKKy0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworLQlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCistCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKy0JZWxzZQorLQkgIGNhc2UgJGhvc3Rfb3MgaW4KKy0JICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKKy0JICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworLQkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCistCSAgICAgOzsKKy0JICAgKikKKy0JICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCistCSAgICAgOzsKKy0JICBlc2FjCistCWZpCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgZmkKKy0gICAgICA7OworLQorLSAgICBvczIqKQorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCistICAgICAgOzsKKy0KKy0gICAgb3NmMyopCistICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworLSAgICAgIGZpCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKy0gICAgICA7OworLQorLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKy0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworLSAgICAgIGVsc2UKKy0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CistCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworLQorLQkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CistCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKy0gICAgICBmaQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorLSAgICAgIDs7CistCistICAgIHNvbGFyaXMqKQorLSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCistICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0Jd2xhcmM9JyR7d2x9JworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworLSAgICAgIGVsc2UKKy0JY2FzZSBgJENDIC1WIDI+JjFgIGluCistCSoiQ29tcGlsZXJzIDUuMCIqKQorLQkgIHdsYXJjPScnCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCistCSAgOzsKKy0JKikKKy0JICB3bGFyYz0nJHt3bH0nCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworLQkgIDs7CistCWVzYWMKKy0gICAgICBmaQorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICBjYXNlICRob3N0X29zIGluCistICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKy0gICAgICAqKQorLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCistCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorLQkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworLQllbHNlCistCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworLQlmaQorLQk7OworLSAgICAgIGVzYWMKKy0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKy0gICAgICA7OworLQorLSAgICBzdW5vczQqKQorLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKy0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0gICAgICBlbHNlCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCistICAgICAgZmkKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICA7OworLQorLSAgICBzeXN2NCkKKy0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorLQlzbmkpCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworLQk7OworLQlzaWVtZW5zKQorLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworLQkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworLSAgICAgICAgOzsKKy0JbW90b3JvbGEpCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorLQk7OworLSAgICAgIGVzYWMKKy0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICA7OworLQorLSAgICBzeXN2NC4zKikKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKy0gICAgICA7OworLQorLSAgICBzeXN2NCpNUCopCistICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICistCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworLSAgICAgIGZpCistICAgICAgOzsKKy0KKy0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKy0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKy0KKy0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0gICAgICBmaQorLSAgICAgIDs7CistCistICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCistICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKy0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCistICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCistICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorLSAgICAgICMgYXMgLXogZGVmcy4KKy0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKy0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKy0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKy0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKy0KKy0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0gICAgICBmaQorLSAgICAgIDs7CistCistICAgIHV0czQqKQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistICAgICAgOzsKKy0KKy0gICAgKikKKy0gICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgOzsKKy0gICAgZXNhYworLQorLSAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCistICAgICAgY2FzZSAkaG9zdCBpbgorLSAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKy0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmxhcmdlZHluc3ltJworLQk7OworLSAgICAgIGVzYWMKKy0gICAgZmkKKy0gIGZpCistXSkKKy1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCistdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworLQorLV9MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKKy0KKy1fTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCistX0xUX0RFQ0woW10sIFtzaHJleHRfY21kc10sIFsxXSwgW1NoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpXSlkbmwKKy1fTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorLSAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCistCistIworLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKy0jCistY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCisteHx4eWVzKQorLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworLQorLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKy0gICAgKid+JyopCistICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorLSAgICAgIDs7CistICAgICckQ0MgJyopCistICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSkKKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CistCistICAgICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKy0gICAgICAgIHNvbmFtZT1jb25mdGVzdAorLSAgICAgICAgbGliPWNvbmZ0ZXN0CistICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKy0gICAgICAgIGRlcGxpYnM9CistICAgICAgICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKy0JcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKy0gICAgICAgIGxpbmtlcl9mbGFncz0tdgorLSAgICAgICAgdmVyc3RyaW5nPQorLSAgICAgICAgb3V0cHV0X29iamRpcj0uCistICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CistICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKy0gICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKy0gICAgICAgIGlmIEFDX1RSWV9FVkFMKF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCistICAgICAgICB0aGVuCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCistICAgICAgICBlbHNlCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworLSAgICAgICAgZmkKKy0gICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworLSAgICAgIGVsc2UKKy0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorLSAgICAgIGZpCistICAgICAgJFJNIGNvbmZ0ZXN0KgorLSAgICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSldKQorLSAgICAgIDs7CistICAgIGVzYWMKKy0gIGZpCistICA7OworLWVzYWMKKy0KKy1fTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorLSAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCistX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCistICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorLSAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCistX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCistICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKKy1fTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAorLSAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKKy1fTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKy0gICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKKy1fTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCistICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKy1fTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAorLSAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKKy1fTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCistX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQorLV9MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCistICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCistICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKKy1fTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKKy1fTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorLSAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKKy1fTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorLSAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorLV9MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCistICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKy0gICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorLSAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF0sIFsxXSwKKy0gICAgW1tJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKy0gICAgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdXSkKKy1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCistICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKKy1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKy0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCistICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKKy1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKy0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCistICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworLSAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorLSAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCistX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKy0gICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCistX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKy0gICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCistX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCistICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKy0gICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKy0gICAgYWdhaW5zdCBpdF0pCistX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorLSAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKy0gICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorLV9MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKy0gICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCistX0xUX1RBR0RFQ0woW10sIFtmaXhfc3JjZmlsZV9wYXRoXSwgWzFdLAorLSAgICBbRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyXSkKKy1fTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKKy0gICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCistX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorLSAgICBbVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9sc10pCistX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCistICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKKy1fTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKy0gICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCistX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCistICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCistX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKy0gICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCistZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCistZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAorLWRubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKKy1dKSMgX0xUX0xJTktFUl9TSExJQlMKKy0KKy0KKy0jIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKy0jIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKy0jIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKy1tNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorLVttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCistbHRfc2F2ZV9DQz0iJENDIgorLUFDX0xBTkdfUFVTSChDKQorLQorLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KKy1hY19leHQ9YworLQorLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KKy1vYmpleHQ9bworLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorLQorLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCistbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorLQorLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCistbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworLQorLV9MVF9UQUdfQ09NUElMRVIKKy0jIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKy0jIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KKy1jb21waWxlcl9ERUZBVUxUPSRDQworLQorLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCistX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCistX0xUX0xJTktFUl9CT0lMRVJQTEFURQorLQorLWlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKy0gIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorLSAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKy0gIF9MVF9DT01QSUxFUl9DX08oJDEpCistICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKy0gIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorLSAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKy0gIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKy0gIExUX1NZU19ETE9QRU5fU0VMRgorLSAgX0xUX0NNRF9TVFJJUExJQgorLQorLSAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CistICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCistICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCistCistICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCistICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKy0KKy0gICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorLSAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgYWl4MyopCistICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCistICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKy0gICAgZmkKKy0gICAgOzsKKy0KKy0gIGFpeFtbNC05XV0qKQorLSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCistICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKy0gICAgZmkKKy0gICAgOzsKKy0gIGVzYWMKKy0gIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKy0KKy0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKy0gICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCistICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCistCistICBfTFRfQ09ORklHKCQxKQorLWZpCistQUNfTEFOR19QT1AKKy1DQz0iJGx0X3NhdmVfQ0MiCistXSkjIF9MVF9MQU5HX0NfQ09ORklHCistCistCistIyBfTFRfUFJPR19DWFgKKy0jIC0tLS0tLS0tLS0tLQorLSMgU2luY2UgQUNfUFJPR19DWFggaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgZysrIGlmIHRoZXJlIGlzIG5vIGMrKworLSMgY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCistbTRfZGVmdW4oW19MVF9QUk9HX0NYWF0sCistWworLXB1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXNdKQorLUFDX1BST0dfQ1hYCistaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKy0gICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CistICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorLSAgQUNfUFJPR19DWFhDUFAKKy1lbHNlCistICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKKy1maQorLXBvcGRlZihbQUNfTVNHX0VSUk9SXSkKKy1dKSMgX0xUX1BST0dfQ1hYCistCistZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorLWRubCBBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSwgW10pCistCistCistIyBfTFRfTEFOR19DWFhfQ09ORklHKFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CistIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCistIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCistbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorLVtBQ19SRVFVSVJFKFtfTFRfUFJPR19DWFhdKWRubAorLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKy0KKy1BQ19MQU5HX1BVU0goQysrKQorLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworLV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKy1fTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCistX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CistX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CistX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworLV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworLV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCistX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworLV9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCistX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorLV9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CistX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCistX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorLV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKy1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworLQorLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorLWFjX2V4dD1jcHAKKy0KKy0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KKy1vYmpleHQ9bworLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorLQorLSMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKy0jIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCistIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorLSMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgorLWlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCistICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorLQorLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKy0gIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKy0KKy0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKy0gIF9MVF9UQUdfQ09NUElMRVIKKy0KKy0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCistICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKy0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKy0KKy0gICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCistICBsdF9zYXZlX0NDPSRDQworLSAgbHRfc2F2ZV9MRD0kTEQKKy0gIGx0X3NhdmVfR0NDPSRHQ0MKKy0gIEdDQz0kR1hYCistICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorLSAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECistICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCistICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorLSAgZWxzZQorLSAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKy0gIGZpCistICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKy0gICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorLSAgZWxzZQorLSAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorLSAgZmkKKy0gIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCistICBDQz0ke0NYWC0iYysrIn0KKy0gIGNvbXBpbGVyPSRDQworLSAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorLQorLSAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorLSAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKy0gICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKy0gICAgZWxzZQorLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKy0gICAgZmkKKy0KKy0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorLQorLSAgICAgIExUX1BBVEhfTEQKKy0KKy0gICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKy0gICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKy0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKy0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKy0KKy0gICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CistICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCistICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorLSAgICAgICAgd2xhcmM9JyR7d2x9JworLQorLSAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorLSAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorLQkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCistICAgICAgICBlbHNlCistICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKy0gICAgICAgIGZpCistICAgICAgZWxzZQorLSAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKy0gICAgICAgIHdsYXJjPQorLQorLSAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKy0gICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCistICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorLSAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCistICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworLSAgICAgIGZpCistCistICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworLSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworLQorLSAgICBlbHNlCistICAgICAgR1hYPW5vCistICAgICAgd2l0aF9nbnVfbGQ9bm8KKy0gICAgICB3bGFyYz0KKy0gICAgZmkKKy0KKy0gICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCistICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCistICAgIGNhc2UgJGhvc3Rfb3MgaW4KKy0gICAgICBhaXgzKikKKy0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLSAgICAgICAgOzsKKy0gICAgICBhaXhbWzQtOV1dKikKKy0gICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKy0gICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCistICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKy0gICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKy0gICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorLSAgICAgICAgZWxzZQorLSAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCistCistICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorLSAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKy0gICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKy0gICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorLQkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCistCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKy0JICAgICAgKi1icnRsKikKKy0JICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworLQkgICAgICAgIGJyZWFrCistCSAgICAgICAgOzsKKy0JICAgICAgZXNhYworLQkgICAgZG9uZQorLQkgICAgOzsKKy0gICAgICAgICAgZXNhYworLQorLSAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworLSAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCistICAgICAgICBmaQorLQorLSAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorLSAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CistICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworLSAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKy0gICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorLQorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKy0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKy0gICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworLSAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKy0KKy0gICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorLSAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKy0gICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCistCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCistCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKy0JICB0aGVuCistCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKy0JICAgIDoKKy0JICBlbHNlCistCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCistCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCistCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorLQkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKy0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKy0JICBmaQorLSAgICAgICAgICBlc2FjCistICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorLQkgICAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCistCSAgZmkKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCistICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKy0JICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorLQkgIHNoYXJlZF9mbGFnPSctRycKKy0gICAgICAgICAgZWxzZQorLQkgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCistCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworLQkgICAgZWxzZQorLQkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworLQkgICAgZmkKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCistCistICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKy0gICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworLQkjIGV4cG9ydC4KKy0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCistICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCistICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKy0gICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCistICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorLSAgICAgICAgICAjIGV4ZWN1dGFibGUuCistICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCistICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorLQorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gJEVDSE8gIlgke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiB8ICRYc2VkOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCistICAgICAgICBlbHNlCistICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCistCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorLSAgICAgICAgICBlbHNlCistCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKy0JICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKy0JICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCistCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCistCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKy0JICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworLQkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCistCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKy0JICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorLQkgICAgIyBsaWJyYXJpZXMuCistCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworLSAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgICAgIDs7CistCistICAgICAgYmVvcyopCistCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0JICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCistCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JZWxzZQorLQkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JZmkKKy0JOzsKKy0KKy0gICAgICBjaG9ydXMqKQorLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgKikKKy0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0JICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCSAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIDs7CistCistICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKy0gICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCistICAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKy0KKy0gICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCistICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorLQkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBlbHNlCistCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGZpfgorLSAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICBlbHNlCistICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICAgIGZpCistICAgICAgICA7OworLSAgICAgIGRhcndpbiogfCByaGFwc29keSopCistICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKy0JOzsKKy0KKy0gICAgICBkZ3V4KikKKy0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIGVjKysqKQorLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CistCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCSAgICA7OworLSAgICAgICAgICBnaGN4KikKKy0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCistCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JICAgIDs7CistICAgICAgICAgICopCistCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICA7OworLQorLSAgICAgIGZyZWVic2RbWzEyXV0qKQorLSAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorLQkjIHN3aXRjaCB0byBFTEYKKy0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICAgIDs7CistCistICAgICAgZnJlZWJzZC1lbGYqKQorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCistICAgICAgICA7OworLQorLSAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCistICAgICAgICAjIGNvbnZlbnRpb25zCistICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworLSAgICAgICAgOzsKKy0KKy0gICAgICBnbnUqKQorLSAgICAgICAgOzsKKy0KKy0gICAgICBocHV4OSopCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CistICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKy0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCistCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorLQkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKy0KKy0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKy0gICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgYUNDKikKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKy0gICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCistICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCistICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCistICAgICAgICAgICAgIworLSAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKy0gICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorLSAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKy0gICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKy0gICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CistICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgOzsKKy0KKy0gICAgICBocHV4MTAqfGhwdXgxMSopCistICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKy0KKy0gICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKy0gICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKy0gICAgICAgICAgICAgIDs7CistICAgICAgICAgICAgKikKKy0JICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKy0gICAgICAgICAgICAgIDs7CistICAgICAgICAgIGVzYWMKKy0gICAgICAgIGZpCistICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCistICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqKQorLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCistICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKy0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorLQkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKy0JCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0KKy0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKy0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQkgICAgOzsKKy0gICAgICAgICAgYUNDKikKKy0JICAgIGNhc2UgJGhvc3RfY3B1IGluCistCSAgICAgIGhwcGEqNjQqKQorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKy0JICAgICAgICA7OworLQkgICAgICBpYTY0KikKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCistCSAgICAgICAgOzsKKy0JICAgICAgKikKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKy0JICAgICAgICA7OworLQkgICAgZXNhYworLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCistCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKy0JICAgICMKKy0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKy0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCistCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CistCSAgICAjIGRlcGVuZGVuY2llcy4KKy0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworLQkgICAgOzsKKy0gICAgICAgICAgKikKKy0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKy0JICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorLQkgICAgICAgICAgaHBwYSo2NCopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKy0JICAgICAgICAgICAgOzsKKy0JICAgICAgICAgIGlhNjQqKQorLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCistCSAgICAgICAgICAgIDs7CistCSAgICAgICAgICAqKQorLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKy0JICAgICAgICAgICAgOzsKKy0JICAgICAgICBlc2FjCistCSAgICAgIGZpCistCSAgICBlbHNlCistCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCSAgICBmaQorLQkgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIDs7CistCistICAgICAgaW50ZXJpeFtbMy05XV0qKQorLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCistCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworLQkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCistCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKy0JIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorLQkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCistCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKy0JIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworLQk7OworLSAgICAgIGlyaXg1KiB8IGlyaXg2KikKKy0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKy0JICAgICMgU0dJIEMrKworLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworLQorLQkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCistCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKy0JICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorLQkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKy0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworLQkgICAgOzsKKy0gICAgICAgICAgKikKKy0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistCSAgICAgIGVsc2UKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAtbyAkbGliJworLQkgICAgICBmaQorLQkgICAgZmkKKy0JICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworLQkgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CistICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKy0gICAgICAgIDs7CistCistICAgICAgbGludXgqIHwgaypic2QqLWdudSkKKy0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIEtDQyopCistCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCistCistCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCistCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CistCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKy0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKy0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCistCSAgICAjCistCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCistCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorLQkgICAgIyBkZXBlbmRlbmNpZXMuCistCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworLQorLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCistCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCistCistCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKy0JICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKy0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKy0JICAgIDs7CistCSAgaWNwYyogfCBlY3BjKiApCistCSAgICAjIEludGVsIEMrKworLQkgICAgd2l0aF9nbnVfbGQ9eWVzCistCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworLQkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKy0JICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCistCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKy0JICAgICAgKiJWZXJzaW9uIDcuIiopCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCQk7OworLQkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorLQkgICAgICAgIHRtcF9pZHluPQorLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCistCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKy0JCWVzYWMKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQkJOzsKKy0JICAgIGVzYWMKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCistCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCistCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworLQkgICAgOzsKKy0gICAgICAgICAgcGdDQyogfCBwZ2NwcCopCistICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKy0JICAgIGNhc2UgYCRDQyAtVmAgaW4KKy0JICAgICpwZ0NDXCBbWzEtNV1dKiB8ICpwZ2NwcFwgW1sxLTVdXSopCistCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CistCQlybSAtcmYgJHRwbGRpcn4KKy0JCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKy0JCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKy0JICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CistCQlybSAtcmYgJHRwbGRpcn4KKy0JCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorLQkJJFJBTkxJQiAkb2xkbGliJworLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorLQkJcm0gLXJmICR0cGxkaXJ+CistCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCistCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorLQkJcm0gLXJmICR0cGxkaXJ+CistCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0JICAgICAgOzsKKy0JICAgICopICMgVmVyc2lvbiA2IHdpbGwgdXNlIHdlYWsgc3ltYm9scworLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKy0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCSAgICAgIDs7CistCSAgICBlc2FjCistCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKy0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKy0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworLSAgICAgICAgICAgIDs7CistCSAgY3h4KikKKy0JICAgICMgQ29tcGFxIEMrKworLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworLQorLQkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKy0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKy0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKy0KKy0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKy0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCistCSAgICAjCistCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCistCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorLQkgICAgIyBkZXBlbmRlbmNpZXMuCistCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworLQkgICAgOzsKKy0JICB4bCopCistCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKy0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCistCSAgICBmaQorLQkgICAgOzsKKy0JICAqKQorLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCistCSAgICAqU3VuXCBDKikKKy0JICAgICAgIyBTdW4gQysrIDUuOQorLQkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCistCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKy0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworLQkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworLQkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworLQorLQkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCistCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKy0JICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCistCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworLQorLQkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKy0JICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCistCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorLQkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorLQkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKy0JICAgIDs7CistCWVzYWMKKy0JOzsKKy0KKy0gICAgICBseW54b3MqKQorLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CistCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JOzsKKy0KKy0gICAgICBtODhrKikKKy0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQk7OworLQorLSAgICAgIG12cyopCistICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBjeHgqKQorLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CistCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCSAgICA7OworLQkgICopCistCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JICAgIDs7CistCWVzYWMKKy0JOzsKKy0KKy0gICAgICBuZXRic2QqKQorLSAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKy0JICB3bGFyYz0KKy0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0JZmkKKy0JIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCistCTs7CistCistICAgICAgKm50byogfCAqcW54KikKKy0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCistCTs7CistCistICAgICAgb3BlbmJzZDIqKQorLSAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCTs7CistCistICAgICAgb3BlbmJzZCopCistCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCistCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKy0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworLQkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCistCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCistCSAgZmkKKy0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCistCWVsc2UKKy0JICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCWZpCistCTs7CistCistICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgS0NDKikKKy0JICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKy0KKy0JICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKy0JICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKy0JICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCistCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKy0KKy0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorLQorLQkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCistCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorLQkgICAgY2FzZSAkaG9zdCBpbgorLQkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworLQkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CistCSAgICBlc2FjCistCSAgICA7OworLSAgICAgICAgICBSQ0MqKQorLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKy0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQkgICAgOzsKKy0gICAgICAgICAgY3h4KikKKy0JICAgIGNhc2UgJGhvc3QgaW4KKy0JICAgICAgb3NmMyopCistCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKy0JCTs7CistCSAgICAgICopCistCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CistCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorLQkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorLQkgICAgICAgICAgJFJNICRsaWIuZXhwJworLQkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKy0JCTs7CistCSAgICBlc2FjCistCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CistCistCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCistCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKy0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLQkgICAgIworLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKy0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKy0JICAgICMgZGVwZW5kZW5jaWVzLgorLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCistCSAgICA7OworLQkgICopCistCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JICAgICAgY2FzZSAkaG9zdCBpbgorLQkgICAgICAgIG9zZjMqKQorLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKy0JCSAgOzsKKy0JICAgICAgICAqKQorLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistCQkgIDs7CistCSAgICAgIGVzYWMKKy0KKy0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKy0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorLQorLQkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCistCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorLQkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKy0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCistCistCSAgICBlbHNlCistCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistCSAgICBmaQorLQkgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIDs7CistCistICAgICAgcHNvcyopCistICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICAgIDs7CistCistICAgICAgc3Vub3M0KikKKy0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKy0JICAgICMgU3VuIEMrKyA0LngKKy0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQkgICAgOzsKKy0gICAgICAgICAgbGNjKikKKy0JICAgICMgTHVjaWQKKy0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQkgICAgOzsKKy0gICAgICAgICAgKikKKy0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLQkgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIDs7CistCistICAgICAgc29sYXJpcyopCistICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBDQyopCistCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCistICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCistCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCistCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCistCistCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKy0JICAgIGNhc2UgJGhvc3Rfb3MgaW4KKy0JICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKy0JICAgICAgKikKKy0JCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCistCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorLQkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCistCQlfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCistCSAgICAgICAgOzsKKy0JICAgIGVzYWMKKy0JICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworLQorLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCistCistCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKy0JICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworLQkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCistCSAgICAjIGluIHRoZSBhcmNoaXZlLgorLQkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCistCSAgICA7OworLSAgICAgICAgICBnY3gqKQorLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKy0KKy0JICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorLQkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworLQkgICAgOzsKKy0gICAgICAgICAgKikKKy0JICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCistCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCistCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCistCistCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworLQkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorLQkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLQkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworLQkgICAgICBlbHNlCistCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworLQkgICAgICAgICMgcGxhdGZvcm0uCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKy0KKy0JICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCistCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCistCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCistCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworLQkgICAgICBmaQorLQorLQkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworLQkgICAgICBjYXNlICRob3N0X29zIGluCistCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworLQkJKikKKy0JCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCistCQkgIDs7CistCSAgICAgIGVzYWMKKy0JICAgIGZpCistCSAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgOzsKKy0KKy0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKy0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKy0KKy0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgQ0MqKQorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCSAgOzsKKy0JKikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0JICA7OworLSAgICAgIGVzYWMKKy0gICAgICA7OworLQorLSAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCistCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CistCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKy0JIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCistCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKy0JIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCistCSMgYXMgLXogZGVmcy4KKy0JX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCistCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworLQlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKy0JX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCistCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCistCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKy0KKy0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQkgICAgOzsKKy0JICAqKQorLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKy0JICAgIDs7CistCWVzYWMKKy0gICAgICA7OworLQorLSAgICAgIHRhbmRlbSopCistICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBOQ0MqKQorLQkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCistCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JICAgIDs7CistICAgICAgICAgICopCistCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0JICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICA7OworLQorLSAgICAgIHZ4d29ya3MqKQorLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CistICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgICA7OworLQorLSAgICAgICopCistICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKy0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0KKy0gICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorLSAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCistCistICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCistICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorLQorLSAgICAjIyBDQVZFQVQgRU1QVE9SOgorLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorLSAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKy0gICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKy0gICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKy0gICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKy0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCistICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorLSAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCistCistICAgIF9MVF9DT05GSUcoJDEpCistICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKy0KKy0gIENDPSRsdF9zYXZlX0NDCistICBMRENYWD0kTEQKKy0gIExEPSRsdF9zYXZlX0xECistICBHQ0M9JGx0X3NhdmVfR0NDCistICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorLSAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorLSAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECistICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKy0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCistZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworLQorLUFDX0xBTkdfUE9QCistXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKKy0KKy0KKy0jIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorLSMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLSMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CistIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCistbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorLVttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKy0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorLV9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KKy1fTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorLV9MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorLV9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0KKy1fTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorLQorLWRubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAorLWRubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCistZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorLWRubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCistZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCistbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLWludCBhOworLXZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CistX0xUX0VPRgorLV0sIFskMV0sIFtDWFhdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy1jbGFzcyBGb28KKy17CistcHVibGljOgorLSAgRm9vICh2b2lkKSB7IGEgPSAwOyB9CistcHJpdmF0ZToKKy0gIGludCBhOworLX07CistX0xUX0VPRgorLV0sIFskMV0sIFtGNzddLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0gICAgICBzdWJyb3V0aW5lIGZvbworLSAgICAgIGltcGxpY2l0IG5vbmUKKy0gICAgICBpbnRlZ2VyKjQgYQorLSAgICAgIGE9MAorLSAgICAgIHJldHVybgorLSAgICAgIGVuZAorLV9MVF9FT0YKKy1dLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0gICAgICBzdWJyb3V0aW5lIGZvbworLSAgICAgIGltcGxpY2l0IG5vbmUKKy0gICAgICBpbnRlZ2VyIGEKKy0gICAgICBhPTAKKy0gICAgICByZXR1cm4KKy0gICAgICBlbmQKKy1fTFRfRU9GCistXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLXB1YmxpYyBjbGFzcyBmb28geworLSAgcHJpdmF0ZSBpbnQgYTsKKy0gIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworLSAgICBhID0gMDsKKy0gIH0KKy19OworLV9MVF9FT0YKKy1dKQorLWRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKy1kbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorLWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCistICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCistCistICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCistICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKy0gIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKy0KKy0gIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKy0gICAgY2FzZSAkcCBpbgorLQorLSAgICAtTCogfCAtUiogfCAtbCopCistICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCistICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKy0gICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKy0gICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKy0JIHByZXY9JHAKKy0JIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CistICAgICAgIGZpCistCistICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCistCSBjYXNlICRwIGluCistCSAtTCogfCAtUiopCistCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKy0JICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCistCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorLQkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorLQkgICBlbHNlCistCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKy0JICAgZmkKKy0JICAgOzsKKy0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCistCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKy0JIGVzYWMKKy0gICAgICAgZWxzZQorLQkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKy0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKy0JIGVsc2UKKy0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCistCSBmaQorLSAgICAgICBmaQorLSAgICAgICA7OworLQorLSAgICAqLiRvYmpleHQpCistICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorLSAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKy0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCistCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworLQkgY29udGludWUKKy0gICAgICAgZmkKKy0KKy0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKy0JIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCistCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCistCSBlbHNlCistCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKy0JIGZpCistICAgICAgIGVsc2UKKy0JIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKy0JIGVsc2UKKy0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCistCSBmaQorLSAgICAgICBmaQorLSAgICAgICA7OworLQorLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKy0KKy0gICAgZXNhYworLSAgZG9uZQorLQorLSAgIyBDbGVhbiB1cC4KKy0gIHJtIC1mIGEub3V0IGEuZXhlCistZWxzZQorLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKKy1maQorLQorLSRSTSAtZiBjb25mZXN0LiRvYmpleHQKKy0KKy0jIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorLW00X2lmKFskMV0sIFtDWFhdLAorLVtjYXNlICRob3N0X29zIGluCistaW50ZXJpeFtbMy05XV0qKQorLSAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKy0gIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorLSAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorLSAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CistICA7OworLQorLWxpbnV4KikKKy0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorLSAgKlN1blwgQyopCistICAgICMgU3VuIEMrKyA1LjkKKy0KKy0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCistICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCistICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKy0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKy0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCistICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCistICAgICAgOzsKKy0gICAgZXNhYworLQorLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorLSAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCistICAgIGZpCistICAgIDs7CistICBlc2FjCistICA7OworLQorLXNvbGFyaXMqKQorLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gIENDKikKKy0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCistICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCistICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKy0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKy0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCistICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCistICAgICAgOzsKKy0gICAgZXNhYworLQorLSAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorLSAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCistICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCistICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCistICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKy0gICAgZmkKKy0gICAgOzsKKy0gIGVzYWMKKy0gIDs7CistZXNhYworLV0pCistCistY2FzZSAiICRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgorLSoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7CistZXNhYworLSBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQorLWlmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCistIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKKy1maQorLV9MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAorLSAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKKy1fTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorLSAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCistICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKKy1fTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKKy1fTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCistX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKKy1fTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKy0gICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCistICAgIGEgc2hhcmVkIGxpYnJhcnldKQorLV0pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCistCistCistIyBfTFRfUFJPR19GNzcKKy0jIC0tLS0tLS0tLS0tLQorLSMgU2luY2UgQUNfUFJPR19GNzcgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworLSMgaWYgdGhlcmUgaXMgbm8gZm9ydHJhbiBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KKy1tNF9kZWZ1bihbX0xUX1BST0dfRjc3XSwKKy1bCistcHVzaGRlZihbQUNfTVNHX0VSUk9SXSwgW19sdF9kaXNhYmxlX0Y3Nz15ZXNdKQorLUFDX1BST0dfRjc3CistaWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKy0gIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKKy1maQorLXBvcGRlZihbQUNfTVNHX0VSUk9SXSkKKy1dKSMgX0xUX1BST0dfRjc3CistCistZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorLWRubCBBQ19ERUZVTihbX0xUX1BST0dfRjc3XSwgW10pCistCistCistIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorLW00X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKKy1bQUNfUkVRVUlSRShbX0xUX1BST0dfRjc3XSlkbmwKKy1BQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKKy0KKy1fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CistX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CistX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworLV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworLV9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworLV9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKy1fTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKy1fTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworLV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KKy1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CistX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKy0KKy0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KKy1hY19leHQ9ZgorLQorLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorLW9iamV4dD1vCistX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CistCistIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorLSMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKy0jIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCistIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCistaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCistICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCistICAgICAgc3Vicm91dGluZSB0CistICAgICAgcmV0dXJuCistICAgICAgZW5kCistIgorLQorLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKy0gIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorLSAgICAgIHByb2dyYW0gdAorLSAgICAgIGVuZAorLSIKKy0KKy0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKy0gIF9MVF9UQUdfQ09NUElMRVIKKy0KKy0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCistICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKy0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKy0KKy0gICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCistICBsdF9zYXZlX0NDPSIkQ0MiCistICBsdF9zYXZlX0dDQz0kR0NDCistICBDQz0ke0Y3Ny0iZjc3In0KKy0gIGNvbXBpbGVyPSRDQworLSAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorLSAgR0NDPSRHNzcKKy0gIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKy0gICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorLSAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCistCistICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKy0gICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCistCistICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorLSAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCistICAgIGNhc2UgJGhvc3Rfb3MgaW4KKy0gICAgICBhaXgzKikKKy0gICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCistICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorLSAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCistICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKy0gICAgICAgIGZpCistICAgICAgICA7OworLSAgICAgIGFpeFtbNC05XV0qKQorLQlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCistCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKy0JZmkKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorLQorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCistICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKy0gICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorLQorLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorLSAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKy0KKy0gICAgIyMgQ0FWRUFUIEVNUFRPUjoKKy0gICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKy0gICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKy0gICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCistICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCistICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCistICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorLSAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKy0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKy0gICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorLQorLSAgICBfTFRfQ09ORklHKCQxKQorLSAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCistCistICBHQ0M9JGx0X3NhdmVfR0NDCistICBDQz0iJGx0X3NhdmVfQ0MiCistZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKy0KKy1BQ19MQU5HX1BPUAorLV0pIyBfTFRfTEFOR19GNzdfQ09ORklHCistCistCistIyBfTFRfUFJPR19GQworLSMgLS0tLS0tLS0tLS0KKy0jIFNpbmNlIEFDX1BST0dfRkMgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworLSMgaWYgdGhlcmUgaXMgbm8gZm9ydHJhbiBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KKy1tNF9kZWZ1bihbX0xUX1BST0dfRkNdLAorLVsKKy1wdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRkM9eWVzXSkKKy1BQ19QUk9HX0ZDCistaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCistICBfbHRfZGlzYWJsZV9GQz15ZXMKKy1maQorLXBvcGRlZihbQUNfTVNHX0VSUk9SXSkKKy1dKSMgX0xUX1BST0dfRkMKKy0KKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GQ10sIFtdKQorLQorLQorLSMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCistIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCistIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCistbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCistW0FDX1JFUVVJUkUoW19MVF9QUk9HX0ZDXSlkbmwKKy1BQ19MQU5HX1BVU0goRm9ydHJhbikKKy0KKy1fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CistX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CistX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworLV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKy1fTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworLV9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKy1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworLV9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKy1fTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKy1fTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworLV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KKy1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CistX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKy0KKy0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorLWFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorLQorLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCistb2JqZXh0PW8KKy1fTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKy0KKy0jIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CistIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCistIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorLSMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgorLWlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCistICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCistICAgICAgc3Vicm91dGluZSB0CistICAgICAgcmV0dXJuCistICAgICAgZW5kCistIgorLQorLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKy0gIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorLSAgICAgIHByb2dyYW0gdAorLSAgICAgIGVuZAorLSIKKy0KKy0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKy0gIF9MVF9UQUdfQ09NUElMRVIKKy0KKy0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCistICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKy0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKy0KKy0gICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCistICBsdF9zYXZlX0NDPSIkQ0MiCistICBsdF9zYXZlX0dDQz0kR0NDCistICBDQz0ke0ZDLSJmOTUifQorLSAgY29tcGlsZXI9JENDCistICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorLQorLSAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorLQorLSAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCistICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKy0KKy0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorLSAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKy0KKy0gICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCistICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKy0gICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICAgIGFpeDMqKQorLSAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKy0gICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKy0gICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CistICAgICAgYWl4W1s0LTldXSopCistCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKy0JICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworLQlmaQorLSAgICAgICAgOzsKKy0gICAgZXNhYworLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCistCistICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKy0gICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCistICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCistCistICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCistICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorLQorLSAgICAjIyBDQVZFQVQgRU1QVE9SOgorLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorLSAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKy0gICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKy0gICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKy0gICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKy0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCistICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorLSAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCistCistICAgIF9MVF9DT05GSUcoJDEpCistICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKy0KKy0gIEdDQz0kbHRfc2F2ZV9HQ0MKKy0gIENDPSIkbHRfc2F2ZV9DQyIKKy1maSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCistCistQUNfTEFOR19QT1AKKy1dKSMgX0xUX0xBTkdfRkNfQ09ORklHCistCistCistIyBfTFRfTEFOR19HQ0pfQ09ORklHKFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCistIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorLW00X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKKy1bQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAorLUFDX0xBTkdfU0FWRQorLQorLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KKy1hY19leHQ9amF2YQorLQorLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KKy1vYmpleHQ9bworLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorLQorLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCistbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCistCistIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKy1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCistCistIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorLV9MVF9UQUdfQ09NUElMRVIKKy0KKy0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKy0KKy0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorLWx0X3NhdmVfQ0M9IiRDQyIKKy1sdF9zYXZlX0dDQz0kR0NDCistR0NDPXllcworLUNDPSR7R0NKLSJnY2oifQorLWNvbXBpbGVyPSRDQworLV9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKy1fTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKy1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCistCistIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworLQorLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCistCistaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorLSAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCistICBfTFRfQ09NUElMRVJfUElDKCQxKQorLSAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKy0gIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorLSAgX0xUX0xJTktFUl9TSExJQlMoJDEpCistICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCistCistICBfTFRfQ09ORklHKCQxKQorLWZpCistCistQUNfTEFOR19SRVNUT1JFCistCistR0NDPSRsdF9zYXZlX0dDQworLUNDPSIkbHRfc2F2ZV9DQyIKKy1dKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworLQorLQorLSMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorLSMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKy0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKy1tNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKKy1bQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCistQUNfTEFOR19TQVZFCistCistIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KKy1hY19leHQ9cmMKKy0KKy0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorLW9iamV4dD1vCistX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CistCistIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKy1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCistCistIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKy1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCistCistIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorLV9MVF9UQUdfQ09NUElMRVIKKy0KKy0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKy0KKy0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorLWx0X3NhdmVfQ0M9IiRDQyIKKy1sdF9zYXZlX0dDQz0kR0NDCistR0NDPQorLUNDPSR7UkMtIndpbmRyZXMifQorLWNvbXBpbGVyPSRDQworLV9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKy1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCistX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworLQorLWlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKy0gIDoKKy0gIF9MVF9DT05GSUcoJDEpCistZmkKKy0KKy1HQ0M9JGx0X3NhdmVfR0NDCistQUNfTEFOR19SRVNUT1JFCistQ0M9IiRsdF9zYXZlX0NDIgorLV0pIyBfTFRfTEFOR19SQ19DT05GSUcKKy0KKy0KKy0jIExUX1BST0dfR0NKCistIyAtLS0tLS0tLS0tLQorLUFDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCistW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCistICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCistICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKy0gICAgICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKy0gICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKKy1dKQorLQorLSMgT2xkIG5hbWU6CistQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorLQorLQorLSMgTFRfUFJPR19SQworLSMgLS0tLS0tLS0tLQorLUFDX0RFRlVOKFtMVF9QUk9HX1JDXSwKKy1bQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCistXSkKKy0KKy0jIE9sZCBuYW1lOgorLUFVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKy0KKy0KKy0jIF9MVF9ERUNMX0VHUkVQCistIyAtLS0tLS0tLS0tLS0tLQorLSMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IGdyZXAKKy0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorLW00X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCistW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorLUFDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAorLXRlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKy1fTFRfREVDTChbXSwgW0dSRVBdLCBbMV0sIFtBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lc10pCistX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKKy1fTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKKy1kbmwgTm9uLWJsZWVkaW5nLWVkZ2UgYXV0b2NvbmYgZG9lc24ndCBzdWJzdCBHUkVQLCBzbyBkbyBpdCBoZXJlIHRvbworLUFDX1NVQlNUKFtHUkVQXSkKKy1dKQorLQorLQorLSMgX0xUX0RFQ0xfU0VECistIyAtLS0tLS0tLS0tLS0KKy0jIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCistIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorLW00X2RlZnVuKFtfTFRfREVDTF9TRURdLAorLVtBQ19QUk9HX1NFRAorLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKKy1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCistX0xUX0RFQ0woW10sIFtTRURdLCBbMV0sIFtBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKKy1fTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKy0gICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKKy1dKSMgX0xUX0RFQ0xfU0VECistCistbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKy0jIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKy0jICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKy0jICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKy0jICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKy0KKy1tNF9kZWZ1bihbQUNfUFJPR19TRURdLAorLVtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCistQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorLVsjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKy0jIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorLSAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorLSAgICAgIGZpCistICAgIGRvbmUKKy0gIGRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLWx0X2FjX21heD0wCistbHRfYWNfY291bnQ9MAorLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCistIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KKy1mb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKy0gIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCistICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKy0gIGx0X2FjX2NvdW50PTAKKy0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorLSAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCistICAgIGJyZWFrCistICBmaQorLSAgd2hpbGUgdHJ1ZTsgZG8KKy0gICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKy0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCistICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCistICAgIGVjaG8gPj5jb25mdGVzdC5ubAorLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworLSAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCistICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorLSAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKy0gICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKy0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKy0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CistICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorLSAgICBmaQorLSAgZG9uZQorLWRvbmUKKy1dKQorLVNFRD0kbHRfY3ZfcGF0aF9TRUQKKy1BQ19TVUJTVChbU0VEXSkKKy1BQ19NU0dfUkVTVUxUKFskU0VEXSkKKy1dKSNBQ19QUk9HX1NFRAorLV0pI200X2lmbmRlZgorLQorLSMgT2xkIG5hbWU6CistQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQorLQorLQorLSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKy0jIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KKy1tNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKKy1bQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKy0jIFRyeSBzb21lIFhTSSBmZWF0dXJlcworLXhzaV9zaGVsbD1ubworLSggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKy0gICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorLSAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorLSAgJiYgeHNpX3NoZWxsPXllcworLUFDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFt4c2lfc2hlbGw9JyR4c2lfc2hlbGwnXSkKKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorLWx0X3NoZWxsX2FwcGVuZD1ubworLSggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKy0gICAgPi9kZXYvbnVsbCAyPiYxIFwKKy0gICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKKy1BQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKKy1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCistCistaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBsdF91bnNldD11bnNldAorLWVsc2UKKy0gIGx0X3Vuc2V0PWZhbHNlCistZmkKKy1fTFRfREVDTChbXSwgW2x0X3Vuc2V0XSwgWzBdLCBbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Il0pZG5sCistCistIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorLWNhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKy0gQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKy0gICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorLSAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKy0gIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKy0gIDs7CistICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorLSAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCistICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKy0gIDs7CistZXNhYworLV9MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorLV9MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorLV0pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKy0KKy0KKy0jIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBCb3VybmUgYW5kIFhTSSBjb21wYXRpYmxlIHZhcmlhbnRzIG9mIHNvbWUgdXNlZnVsIHNoZWxsIGZ1bmN0aW9ucy4KKy1tNF9kZWZ1bihbX0xUX1BST0dfWFNJX1NIRUxMRk5TXSwKKy1bY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKy19CistCistZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKKy1kbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorLWRubCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBoZXJlLgorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCistICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCistICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICdzL1wuW1teLl1dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRbQF0iYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJFsxXSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkWzFdKz1cJFsyXSIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLV0pCistCistIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCistIworLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CistIworLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKy0jIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCistCistIyBzZXJpYWwgNiBsdG9wdGlvbnMubTQKKy0KKy0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorLUFDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKy0KKy0KKy0jIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCistW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorLQorLQorLSMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCistIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorLSMgc2F2ZWQgYXMgYSBmbGFnLgorLW00X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorLVttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCistbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKy0gICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCistICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCistXSkKKy0KKy0KKy0jIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KKy1tNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAorLVttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorLQorLQorLSMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQorLSMgYXJlIHNldC4KKy1tNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCistW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorLQkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorLQkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorLW00X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMworLV0pW11kbmwKKy1dKQorLQorLQorLSMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorLSMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKy0jIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAorLSMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorLW00X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorLVsjIFNldCBvcHRpb25zCistbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCistICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCistCistbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworLSAgZG5sCistICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKKy0gIGRubCBzcGVjaWZpZWQ6CistICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKy0gIF0pCistICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKy0gIF0pCistICBkbmwKKy0gIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCistICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorLSAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKy0gIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCistICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKKy0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKy0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorLSAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorLSAgXSkKKy1dKSMgX0xUX1NFVF9PUFRJT05TCistCistCistCistIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorLVtbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQorLQorLQorLSMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKKy1bbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKKy1dKSMgTFRfT1BUSU9OX0RFRklORQorLQorLQorLSMgZGxvcGVuCistIyAtLS0tLS0KKy1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcworLV0pCistCistQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKKy1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKKy1BQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKKy1wdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKKy1dKQorLQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCistCistCistIyB3aW4zMi1kbGwKKy0jIC0tLS0tLS0tLQorLSMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKKy1bZW5hYmxlX3dpbjMyX2RsbD15ZXMKKy0KKy1jYXNlICRob3N0IGluCistKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqKQorLSAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQorLSAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKy0gIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCistICA7OworLWVzYWMKKy0KKy10ZXN0IC16ICIkQVMiICYmIEFTPWFzCistX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzBdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorLQorLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKy1fTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMF0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCistCistdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorLV9MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFswXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCistXSkjIHdpbjMyLWRsbAorLQorLUFVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCistW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKy1fTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQorLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCistWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorLXB1dCB0aGUgYHdpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorLV0pCistCistZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKy0KKy0KKy0jIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgYHNoYXJlZCcgYW5kCistIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKy0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KKy1tNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKKy1bbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorLUFDX0FSR19FTkFCTEUoW3NoYXJlZF0sCistICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkQDw6QD1QS0dTQDo+QF0sCistCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCistICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorLSAgICBjYXNlICRlbmFibGV2YWwgaW4KKy0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworLSAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworLSAgICAqKQorLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKy0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCistICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCistICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworLQlJRlM9IiRsdF9zYXZlX2lmcyIKKy0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKy0JICBlbmFibGVfc2hhcmVkPXllcworLQlmaQorLSAgICAgIGRvbmUKKy0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKy0gICAgICA7OworLSAgICBlc2FjXSwKKy0gICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCistCistICAgIF9MVF9ERUNMKFtidWlsZF9saWJ0b29sX2xpYnNdLCBbZW5hYmxlX3NoYXJlZF0sIFswXSwKKy0JW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorLV0pIyBfTFRfRU5BQkxFX1NIQVJFRAorLQorLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCistTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCistCistIyBPbGQgbmFtZXM6CistQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3NoYXJlZF0pCistXSkKKy0KKy1BQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCistXSkKKy0KKy1BVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCistQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCistCistZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorLWRubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorLWRubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbXSkKKy0KKy0KKy0KKy0jIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgc3RhdGljJyBhbmQKKy0jIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorLW00X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAorLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCistQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKy0gICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKy0JW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKy0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CistICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorLSAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CistICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CistICAgICopCistICAgICBlbmFibGVfc3RhdGljPW5vCistICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKy0JSUZTPSIkbHRfc2F2ZV9pZnMiCistCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCistCSAgZW5hYmxlX3N0YXRpYz15ZXMKKy0JZmkKKy0gICAgICBkb25lCistICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICAgICAgOzsKKy0gICAgZXNhY10sCistICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorLQorLSAgICBfTFRfREVDTChbYnVpbGRfb2xkX2xpYnNdLCBbZW5hYmxlX3N0YXRpY10sIFswXSwKKy0JW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorLV0pIyBfTFRfRU5BQkxFX1NUQVRJQworLQorLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCistTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCistCistIyBPbGQgbmFtZXM6CistQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3N0YXRpY10pCistXSkKKy0KKy1BQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCistXSkKKy0KKy1BVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCistQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCistCistZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorLWRubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorLWRubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbXSkKKy0KKy0KKy0KKy0jIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgZmFzdC1pbnN0YWxsJworLSMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorLW00X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCistQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKy0gICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKy0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKy0gICAgY2FzZSAkZW5hYmxldmFsIGluCistICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKy0gICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKy0gICAgKikKKy0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCistICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKy0JSUZTPSIkbHRfc2F2ZV9pZnMiCistCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCistCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKy0JZmkKKy0gICAgICBkb25lCistICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICAgICAgOzsKKy0gICAgZXNhY10sCistICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorLQorLV9MVF9ERUNMKFtmYXN0X2luc3RhbGxdLCBbZW5hYmxlX2Zhc3RfaW5zdGFsbF0sIFswXSwKKy0JIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorLV0pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorLQorLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCistTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCistCistIyBPbGQgbmFtZXM6CistQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCistQUNfRElBR05PU0UoW29ic29sZXRlXSwKKy1bJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAorLXRoZSBgZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCistXSkKKy0KKy1BVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAorLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCistQUNfRElBR05PU0UoW29ic29sZXRlXSwKKy1bJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAorLXRoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKKy1dKQorLQorLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKy1kbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKy1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwgW10pCistCistCistIyBfTFRfV0lUSF9QSUMoW01PREVdKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKy0jIExUX0lOSVQgb3B0aW9ucy4KKy0jIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCistbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorLVtBQ19BUkdfV0lUSChbcGljXSwKKy0gICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKy0JW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKy0gICAgW3BpY19tb2RlPSIkd2l0aHZhbCJdLAorLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCistCistdGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKy0KKy1fTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorLV0pIyBfTFRfV0lUSF9QSUMKKy0KKy1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCistCistIyBPbGQgbmFtZToKKy1BVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKKy1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCistWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorLXB1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCistXSkKKy0KKy1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CistZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKy0KKy0KKy1tNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKKy1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKy0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKKy1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKy0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKKy1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCistCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorLQorLW00X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorLUxUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCistCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKKy1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorLQkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCistCistIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KKy0jCistIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKy0jCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CistIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy0jIHNlcmlhbCA1IGx0c3VnYXIubTQKKy0KKy0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorLUFDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKy0KKy0KKy0jIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKKy0jIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorLSMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorLSMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KKy1tNF9kZWZpbmUoW2x0X2pvaW5dLAorLVttNF9pZihbJCNdLCBbMV0sIFtdLAorLSAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKKy0gICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKy1tNF9kZWZpbmUoW19sdF9qb2luXSwKKy1bbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAorLSAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKy0KKy0KKy0jIGx0X2NhcihMSVNUKQorLSMgbHRfY2RyKExJU1QpCistIyAtLS0tLS0tLS0tLS0KKy0jIE1hbmlwdWxhdGUgbTQgbGlzdHMuCistIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CistIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KKy1tNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKKy1tNF9kZWZpbmUoW2x0X2Nkcl0sCistW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCistICAgICAgIFskI10sIDEsIFtdLAorLSAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCistbTRfZGVmaW5lKFtsdF91bnF1b3RlXSwgJDEpCistCistCistIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCistIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCistIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKy0jIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorLSMgdGhhbiBkZWZpbmVkIGFuZCBlbXB0eSkuCistIworLSMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorLSMgdmVyc2lvbnMgb2YgbTRzdWdhciBtaXN0YWtlbmx5IGV4cGFuZGVkIFNFUEFSQVRPUiBidXQgbm90IFNUUklORy4KKy1tNF9kZWZpbmUoW2x0X2FwcGVuZF0sCistW200X2RlZmluZShbJDFdLAorLQkgICBtNF9pZmRlZihbJDFdLCBbbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKKy0KKy0KKy0KKy0jIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIFByb2R1Y2UgYSBTRVAgZGVsaW1pdGVkIGxpc3Qgb2YgYWxsIHBhaXJlZCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgb2YKKy0jIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKy0jIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorLW00X2RlZmluZShbbHRfY29tYmluZV0sCistW200X2lmKFskMl0sIFtdLCBbXSwKKy0gIFttNF9pZihbJDRdLCBbXSwgW10sCistICAgIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCistICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfcHJlZml4LCBbJDJdLAorLQkJICAgW200X2ZvcmVhY2goX0x0X3N1ZmZpeCwgbHRfY2FyKFttNF9zaGlmdG4oMywgJEApXSksCistCQkJICAgICAgIFtfTHRfcHJlZml4W10kM1tdX0x0X3N1ZmZpeCBdKV0pKSkpKV0pXSlkbmwKKy1dKQorLQorLQorLSMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBJZmYgTUFDUk8tTkFNRSBkb2VzIG5vdCB5ZXQgY29udGFpbiBWQVJOQU1FLCB0aGVuIGFwcGVuZCBpdCAoZGVsaW1pdGVkCistIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KKy1tNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKKy1bbTRfaWZkZWYoWyQxXSwKKy0JICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCistCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKy0JCSBbJDVdKV0sCistCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorLQorLQorLSMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF0sCistW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorLQorLQorLSMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF9zdWJrZXldLAorLVttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKy0KKy0KKy0jIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW2x0X2RpY3RfZmV0Y2hdLAorLVttNF9pZnZhbChbJDNdLAorLQltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCistICAgIG00X2lmZGVmKFskMSgkMildLCBbbTRfZGVmbihbJDEoJDIpXSldKSldKQorLQorLQorLSMgbHRfaWZfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldLCBWQUxVRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKKy1bbTRfaWYobHRfZGljdF9mZXRjaChbJDFdLCBbJDJdLCBbJDNdKSwgWyQ0XSwKKy0JWyQ1XSwKKy0gICAgWyQ2XSldKQorLQorLQorLSMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCistW200X2lmKFskNV0sIFtdLCBbXSwKKy0gIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQ0XSwgW1ssIF1dKSksCistICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorLQkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCistXSkKKy0KKy0jIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCistIworLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorLSMKKy0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCistIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKy0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorLQorLSMgR2VuZXJhdGVkIGZyb20gbHR2ZXJzaW9uLmluLgorLQorLSMgc2VyaWFsIDI5NzYgbHR2ZXJzaW9uLm00CistIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorLQorLW00X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuMi40XSkKKy1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4yOTc2XSkKKy0KKy1BQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorLVttYWNyb192ZXJzaW9uPScyLjIuNCcKKy1tYWNyb19yZXZpc2lvbj0nMS4yOTc2JworLV9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorLV9MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCistXSkKKy0KKy0jIGx0fm9ic29sZXRlLm00IC0tIGFjbG9jYWwgc2F0aXNmeWluZyBvYnNvbGV0ZSBkZWZpbml0aW9ucy4gICAgLSotQXV0b2NvbmYtKi0KKy0jCistIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0LgorLSMKKy0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCistIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKy0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorLQorLSMgc2VyaWFsIDQgbHR+b2Jzb2xldGUubTQKKysjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorLSMKKy0jIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKQorLSMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCistIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorLSMKKy0jIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKy0jIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKy0jIHVzaW5nIGEgbWFjcm8gd2l0aCB0aGUgc2FtZSBuYW1lIGluIG91ciBsb2NhbCBtNC9saWJ0b29sLm00IGl0J2xsCistIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKy0jIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCistIworLSMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCistIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKy0jIEFDX0RFRlVOcyBpdCB3YW50cywgYnV0IHdoZW4gbTQgcHJvY2Vzc2VzIGl0LCBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCistIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorLSMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCistIworLSMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCistIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorLSMgd2UgZ2l2ZSB1cCBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgYmVmb3JlIDEuNywgYXQgd2hpY2ggcG9pbnQKKy0jIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KKy1BQ19ERUZVTihbTFRPQlNPTEVURV9WRVJTSU9OXSwgW200X2lmKFsxXSldKQorKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCistbTRfaWZuZGVmKFtBQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCistbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSldKQorLW00X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorLW00X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCistbTRfaWZuZGVmKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSldKQorLW00X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorLW00X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19MT0NLXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xPQ0tdKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCistbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorLW00X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10pXSkKKy1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorLW00X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKKy1tNF9pZm5kZWYoW0FDX0xURExfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTFRETF9PQkpESVJdKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKKy1tNF9pZm5kZWYoW0FDX1BBVEhfTUFHSUNdLAkJW0FDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSldKQorLW00X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKKy1tNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCistbTRfaWZuZGVmKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0sCVtBQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKKy1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorLW00X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKKy1tNF9pZm5kZWYoW0xUX0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX0VHUkVQXSldKQorLW00X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKKy1tNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKKy1tNF9pZm5kZWYoW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSldKQorLW00X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKKy1tNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorLW00X2lmbmRlZihbQUNfTElCVE9PTF9TRVRVUF0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdKV0pCistbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCistbTRfaWZuZGVmKFtfTFRfQUNfVEFHQ09ORklHXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10pXSkKKy1tNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N10pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKKy1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfUkNdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSldKQorLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCistbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddKV0pCistbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10pXSkKKy1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKKy1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSldKQorLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCistbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorLW00X2lmbmRlZihbX0xUX0FDX0ZJTEVfTFRETExfQ10sCVtBQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10pXSkKKyttNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKKyttNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAorKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorK200X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjldLCwKKytbbTRfd2FybmluZyhbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjkuCisrWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KKytJZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KKytUbyBkbyBzbywgdXNlIHRoZSBwcm9jZWR1cmUgZG9jdW1lbnRlZCBieSB0aGUgcGFja2FnZSwgdHlwaWNhbGx5ICdhdXRvcmVjb25mJy5dKV0pCisgCistIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtNzk0NSwxMCArMzIsMTAgQEAgbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorICMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCisgIyAoVGhpcyBwcml2YXRlIG1hY3JvIHNob3VsZCBub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhpcyBmaWxlLikKKyBBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCistW2FtX19hcGlfdmVyc2lvbj0nMS4xMCcKKytbYW1fX2FwaV92ZXJzaW9uPScxLjE0JworIGRubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KKyBkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgorLW00X2lmKFskMV0sIFsxLjEwLjFdLCBbXSwKKyttNF9pZihbJDFdLCBbMS4xNC4xXSwgW10sCisgICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorIF0pCisgCitAQCAtNzk2MiwyNCArNDksMjQgQEAgbTRfZGVmaW5lKFtfQU1fQVVUT0NPTkZfVkVSU0lPTl0sIFtdKQorICMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIHRoZXkgY2FuIGJlIHRyYWNlZC4KKy0jIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KKysjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KKyBBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCistW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTAuMV0pZG5sCisrW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTQuMV0pZG5sCisgbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKKy1fQU1fQVVUT0NPTkZfVkVSU0lPTihBQ19BVVRPQ09ORl9WRVJTSU9OKV0pCisrX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pKV0pCisgCisgIyBBTV9BVVhfRElSX0VYUEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIAorLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorICMgRm9yIHByb2plY3RzIHVzaW5nIEFDX0NPTkZJR19BVVhfRElSKFtmb29dKSwgQXV0b2NvbmYgc2V0cworLSMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKy0jIGAkc3JjZGlyJywgYCRzcmNkaXIvLi4nLCBvciBgJHNyY2Rpci8uLi8uLicuCisrIyAkYWNfYXV4X2RpciB0byAnJHNyY2Rpci9mb28nLiAgSW4gb3RoZXIgcHJvamVjdHMsIGl0IGlzIHNldCB0bworKyMgJyRzcmNkaXInLCAnJHNyY2Rpci8uLicsIG9yICckc3JjZGlyLy4uLy4uJy4KKyAjCisgIyBPZiBjb3Vyc2UsIEF1dG9tYWtlIG11c3QgaG9ub3IgdGhpcyB2YXJpYWJsZSB3aGVuZXZlciBpdCBjYWxscyBhCisgIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorQEAgLTc5OTgsNyArODUsNyBAQCBfQU1fQVVUT0NPTkZfVkVSU0lPTihBQ19BVVRPQ09ORl9WRVJTSU9OKV0pCisgIworICMgVGhlIHJlYXNvbiBvZiB0aGUgbGF0dGVyIGZhaWx1cmUgaXMgdGhhdCAkdG9wX3NyY2RpciBhbmQgJGFjX2F1eF9kaXIKKyAjIGFyZSBib3RoIHByZWZpeGVkIGJ5ICRzcmNkaXIuICBJbiBhbiBpbi1zb3VyY2UgYnVpbGQgdGhpcyBpcyB1c3VhbGx5CistIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKysjIGhhcm1sZXNzIGJlY2F1c2UgJHNyY2RpciBpcyAnLicsIGJ1dCB0aGluZ3Mgd2lsbCBicm9rZSB3aGVuIHlvdQorICMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyAjCisgIyBTbyB3ZSBjb3VsZCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIgdG8gJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZywKK0BAIC04MDI0LDI2ICsxMTEsMjQgQEAgYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorIAorICMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyAKKy0jIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA4CistCisgIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KKyBBQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAorLVtBQ19QUkVSRVEoMi41MilkbmwKKy0gaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKy0JWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAorK1tBQ19QUkVSRVEoWzIuNTJdKWRubAorKyBtNF9pZihbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCisrICAgICAgIFskMV0sIFtGQUxTRV0sIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSlkbmwKKyBBQ19TVUJTVChbJDFfVFJVRV0pZG5sCisgQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKKyBfQU1fU1VCU1RfTk9UTUFLRShbJDFfVFJVRV0pZG5sCisgX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKKyttNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKKyBpZiAkMjsgdGhlbgorICAgJDFfVFJVRT0KKyAgICQxX0ZBTFNFPScjJworQEAgLTgwNTcsMTYgKzE0MiwxNCBAQCBBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5Ll1dKQorIGZpXSldKQorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CistIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgc2VyaWFsIDkKKyAKKy0jIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQorKyMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgJ0FDX1BST0dfQ0MnIGJlCisgIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyAjIHdpbGwgdGhpbmsgaXQgc2VlcyBhICp1c2UqLCBhbmQgdGhlcmVmb3JlIHdpbGwgdHJpZ2dlciBhbGwgaXQncworICMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZworQEAgLTgwNzYsNyArMTU5LDcgQEAgZmldKV0pCisgIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBTZWUgaG93IHRoZSBjb21waWxlciBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgY2hlY2tpbmcuCistIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorKyMgTkFNRSBpcyAiQ0MiLCAiQ1hYIiwgIk9CSkMiLCAiT0JKQ1hYIiwgIlVQQyIsIG9yICJHSkMiLgorICMgV2UgdHJ5IGEgZmV3IHRlY2huaXF1ZXMgYW5kIHVzZSB0aGF0IHRvIHNldCBhIHNpbmdsZSBjYWNoZSB2YXJpYWJsZS4KKyAjCisgIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKK0BAIC04MDg5LDEyICsxNzIsMTMgQEAgQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAorIEFDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCisgQUNfUkVRVUlSRShbQU1fREVQX1RSQUNLXSlkbmwKKyAKKy1pZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorLSAgICAgICBbJDFdLCBDWFgsICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCistICAgICAgIFskMV0sIE9CSkMsIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCistICAgICAgIFskMV0sIFVQQywgIFtkZXBjYz0iJFVQQyIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKy0gICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKy0gICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQorK200X2lmKFskMV0sIFtDQ10sICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorKyAgICAgIFskMV0sIFtDWFhdLCAgW2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorKyAgICAgIFskMV0sIFtPQkpDXSwgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKysgICAgICBbJDFdLCBbT0JKQ1hYXSwgW2RlcGNjPSIkT0JKQ1hYIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorKyAgICAgIFskMV0sIFtVUENdLCAgW2RlcGNjPSIkVVBDIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorKyAgICAgIFskMV0sIFtHQ0pdLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKysgICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKKyAKKyBBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAorICAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCitAQCAtODEwMiw4ICsxODYsOSBAQCBBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAorICAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCistICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CistICAjIGluIEQnLgorKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAorKyAgIyBpbiBEIi4KKysgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCitAQCAtODEyMSw2ICsyMDYsMTYgQEAgQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKKyAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCisgICBmaQorKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisrICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworKyAgICAgZXNhY10sCisrICAgIFtDWFhdLAorKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisrICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworKyAgICAgZXNhY10pCisrCisgICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKK0BAIC04MTMyLDM1ICsyMjcsNDkgQEAgQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKKyAgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKy0gICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorLSAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCistICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisrICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKysgICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KKysgICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKKyAgICAgZG9uZQorICAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisgCisrICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorKyAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKysgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICAgY2FzZSAkZGVwbW9kZSBpbgorKyAgICBnY2MpCisrICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKysgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorKyAgICAgIDs7CisgICAgIG5vc2lkZWVmZmVjdCkKKy0gICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKy0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisrICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisrICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKyAgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKyAJY29udGludWUKKyAgICAgICBlbHNlCisgCWJyZWFrCisgICAgICAgZmkKKyAgICAgICA7OworKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisrICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKysgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKysgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKysgICAgICBhbV9fbWludXNfb2JqPQorKyAgICAgIDs7CisgICAgIG5vbmUpIGJyZWFrIDs7CisgICAgIGVzYWMKKy0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCistICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CistICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKy0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKy0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKysgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCistICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCitAQCAtODE5Myw3ICszMDIsNyBAQCBBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAjIEFNX1NFVF9ERVBESVIKKyAjIC0tLS0tLS0tLS0tLS0KKyAjIENob29zZSBhIGRpcmVjdG9yeSBuYW1lIGZvciBkZXBlbmRlbmN5IGZpbGVzLgorLSMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCisrIyBUaGlzIG1hY3JvIGlzIEFDX1JFUVVJUkVkIGluIF9BTV9ERVBFTkRFTkNJRVMuCisgQUNfREVGVU4oW0FNX1NFVF9ERVBESVJdLAorIFtBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAorIEFDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK0BAIC04MjAzLDcxICszMTIsODUgQEAgQUNfU1VCU1QoW0RFUERJUl0sIFsiJHthbV9fbGVhZGluZ19kb3R9ZGVwcyJdKWRubAorICMgQU1fREVQX1RSQUNLCisgIyAtLS0tLS0tLS0tLS0KKyBBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKKy1bQUNfQVJHX0VOQUJMRShkZXBlbmRlbmN5LXRyYWNraW5nLAorLVsgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKy0gIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKKytbQUNfQVJHX0VOQUJMRShbZGVwZW5kZW5jeS10cmFja2luZ10sIFtkbmwKKytBU19IRUxQX1NUUklORygKKysgIFstLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nXSwKKysgIFtkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKKytBU19IRUxQX1NUUklORygKKysgIFstLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZ10sCisrICBbc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkXSldKQorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgIEFNREVQQkFDS1NMQVNIPSdcJworKyAgYW1fX25vZGVwPSdfbm8nCisgZmkKKyBBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKKyBBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAorIF9BTV9TVUJTVF9OT1RNQUtFKFtBTURFUEJBQ0tTTEFTSF0pZG5sCisrQUNfU1VCU1QoW2FtX19ub2RlcF0pZG5sCisrX0FNX1NVQlNUX05PVE1BS0UoW2FtX19ub2RlcF0pZG5sCisgXSkKKyAKKyAjIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKy0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistI3NlcmlhbCAzCisgCisgIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorLVtmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KKy0gICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCistICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorLSAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKy0gICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKy0gICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorLSAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKy0gICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCistICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorLSAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCistICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorLSAgZWxzZQorLSAgICBjb250aW51ZQorLSAgZmkKKy0gICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCistICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCistICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorLSAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKy0gIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorLSAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCistICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorLSAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKy0gIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKy0gICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKy0gICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorLSAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKy0gICMgZXhwYW5zaW9uLgorLSAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCistICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorLSAgICAgICBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKy0gICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCistICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorLSAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCistICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKKy0gICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKy0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisrW3sKKysgICMgT2xkZXIgQXV0b2NvbmYgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisrICBjYXNlICRDT05GSUdfRklMRVMgaW4KKysgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisrICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKysgIGVzYWMKKysgIHNoaWZ0CisrICBmb3IgbWYKKysgIGRvCisrICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisrICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisrICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisrICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCAnTWFrZWZpbGUuaW4nLCBidXQKKysgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisrICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisrICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisrICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisrICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCisrICAgIGVsc2UKKysgICAgICBjb250aW51ZQorKyAgICBmaQorKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyAnbWFrZScuCisrICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisrICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisrICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorKyAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisrICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisrICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKysgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisrICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisrICAgICMgZXhwYW5zaW9uLgorKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKysgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKysJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnYDsgZG8KKysgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKysgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKysgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisrICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQorKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisrICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisrICAgIGRvbmUKKyAgIGRvbmUKKy1kb25lCisrfQorIF0pIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyAKKyAKK0BAIC04Mjc2LDcgKzM5OSw3IEBAIGRvbmUKKyAjIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KKyAjCisgIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCistIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCBgLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisrIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCAnLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisgIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorIEFDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgW0FDX0NPTkZJR19DT01NQU5EUyhbZGVwZmlsZXNdLAorQEAgLTgyODYsMTggKzQwOSwyMSBAQCBBQ19ERUZVTihbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorIAorICMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyAKKy0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKy0jIDIwMDUsIDIwMDYsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCAxMworLQorICMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCisgIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgorIAorK2RubCBSZWRlZmluZSBBQ19QUk9HX0NDIHRvIGF1dG9tYXRpY2FsbHkgaW52b2tlIF9BTV9QUk9HX0NDX0NfTy4KKyttNF9kZWZpbmUoW0FDX1BST0dfQ0NdLAorK200X2RlZm4oW0FDX1BST0dfQ0NdKQorK1tfQU1fUFJPR19DQ19DX08KKytdKQorKworICMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKKyAjIEFNX0lOSVRfQVVUT01BS0UoW09QVElPTlNdKQorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BAIC04MzEwLDcgKzQzNiw3IEBAIEFDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisgIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgorIEFDX0RFRlVOKFtBTV9JTklUX0FVVE9NQUtFXSwKKy1bQUNfUFJFUkVRKFsyLjYwXSlkbmwKKytbQUNfUFJFUkVRKFsyLjY1XSlkbmwKKyBkbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdworIGRubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgorIG00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQEAgLTgzMzksNTUgKzQ2NSwxMjEgQEAgQUNfU1VCU1QoW0NZR1BBVEhfV10pCisgIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorIGRubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgorIG00X2lmdmFsKFskMl0sCistW200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorK1tBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorKyAgICAgICAgICAgICBbJDA6IHR3by0gYW5kIHRocmVlLWFyZ3VtZW50cyBmb3JtcyBhcmUgZGVwcmVjYXRlZC5dKQorK200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorICBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCisgIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAorIFtfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKKyBkbmwgRGlhZ25vc2Ugb2xkLXN0eWxlIEFDX0lOSVQgd2l0aCBuZXctc3R5bGUgQU1fQVVUT01BS0VfSU5JVC4KKy1tNF9pZihtNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgMSltNF9pZmRlZihbQUNfUEFDS0FHRV9WRVJTSU9OXSwgMSksIDExLCwKKyttNF9pZigKKysgIG00X2lmZGVmKFtBQ19QQUNLQUdFX05BTUVdLCBbb2tdKTptNF9pZmRlZihbQUNfUEFDS0FHRV9WRVJTSU9OXSwgW29rXSksCisrICBbb2s6b2tdLCwKKyAgIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCisgIEFDX1NVQlNUKFtQQUNLQUdFXSwgWydBQ19QQUNLQUdFX1RBUk5BTUUnXSlkbmwKKyAgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCisgCisgX0FNX0lGX09QVElPTihbbm8tZGVmaW5lXSwsCistW0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKKy0gQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorK1tBQ19ERUZJTkVfVU5RVU9URUQoW1BBQ0tBR0VdLCBbIiRQQUNLQUdFIl0sIFtOYW1lIG9mIHBhY2thZ2VdKQorKyBBQ19ERUZJTkVfVU5RVU9URUQoW1ZFUlNJT05dLCBbIiRWRVJTSU9OIl0sIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorIAorICMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KKyBBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorIEFDX1JFUVVJUkUoW0FDX0FSR19QUk9HUkFNXSlkbmwKKy1BTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0pCistQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKKy1BTV9NSVNTSU5HX1BST0coQVVUT01BS0UsIGF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSkKKy1BTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKKy1BTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQorLUFNX1BST0dfSU5TVEFMTF9TSAorLUFNX1BST0dfSU5TVEFMTF9TVFJJUAorLUFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisrQU1fTUlTU0lOR19QUk9HKFtBQ0xPQ0FMXSwgW2FjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259XSkKKytBTV9NSVNTSU5HX1BST0coW0FVVE9DT05GXSwgW2F1dG9jb25mXSkKKytBTV9NSVNTSU5HX1BST0coW0FVVE9NQUtFXSwgW2F1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufV0pCisrQU1fTUlTU0lOR19QUk9HKFtBVVRPSEVBREVSXSwgW2F1dG9oZWFkZXJdKQorK0FNX01JU1NJTkdfUFJPRyhbTUFLRUlORk9dLCBbbWFrZWluZm9dKQorK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisrQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NUUklQXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorKyMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54CisrIyBkaWVzIG91dCBmb3IgZ29vZC4gIEZvciBtb3JlIGJhY2tncm91bmQsIHNlZToKKysjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAwMS5odG1sPgorKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+CisrQUNfU1VCU1QoW21rZGlyX3BdLCBbJyQoTUtESVJfUCknXSkKKyAjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorICMgc29tZSBwbGF0Zm9ybXMuCisgQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorIEFDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCisgX0FNX0lGX09QVElPTihbdGFyLXVzdGFyXSwgW19BTV9QUk9HX1RBUihbdXN0YXJdKV0sCistICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKy0JICAgICAgCQkgICAgIFtfQU1fUFJPR19UQVIoW3Y3XSldKV0pCisrCSAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAorKwkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKKyBfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwKKyBbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAorLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCistICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DQ10sCistICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhDQyldKV0pZG5sCisrCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtDQ10pXSwKKysJCSAgW200X2RlZmluZShbQUNfUFJPR19DQ10sCisrCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhbQ0NdKV0pXSlkbmwKKyBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAorLSAgICAgICAgICAgICAgICAgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZm4oW0FDX1BST0dfQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSldKWRubAorKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ1hYXSldLAorKwkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sCisrCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoW0NYWF0pXSldKWRubAorIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSwKKy0gICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX09CSkNdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKKy1dKQorKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ10pXSwKKysJCSAgW200X2RlZmluZShbQUNfUFJPR19PQkpDXSwKKysJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0pXSlkbmwKKytBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDWFhdLAorKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldLAorKwkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNYWF0sCisrCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX09CSkNYWF0pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSldKWRubAorIF0pCisrQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSlkbmwKKytkbmwgVGhlIHRlc3RzdWl0ZSBkcml2ZXIgbWF5IG5lZWQgdG8ga25vdyBhYm91dCBFWEVFWFQsIHNvIGFkZCB0aGUKKytkbmwgJ2FtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzCisrZG5sIG1hY3JvIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KKytBQ19DT05GSUdfQ09NTUFORFNfUFJFKGRubAorK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKysgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAorKworKyMgUE9TSVggd2lsbCBzYXkgaW4gYSBmdXR1cmUgdmVyc2lvbiB0aGF0IHJ1bm5pbmcgInJtIC1mIiB3aXRoIG5vIGFyZ3VtZW50CisrIyBpcyBPSzsgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBtYWtlIHRoYXQgYXNzdW1wdGlvbiBpbiBvdXIgTWFrZWZpbGUKKysjIHJlY2lwZXMuICBTbyB1c2UgYW4gYWdncmVzc2l2ZSBwcm9iZSB0byBjaGVjayB0aGF0IHRoZSB1c2FnZSB3ZSB3YW50IGlzCisrIyBhY3R1YWxseSBzdXBwb3J0ZWQgImluIHRoZSB3aWxkIiB0byBhbiBhY2NlcHRhYmxlIGRlZ3JlZS4KKysjIFNlZSBhdXRvbWFrZSBidWcjMTA4MjguCisrIyBUbyBtYWtlIGFueSBpc3N1ZSBtb3JlIHZpc2libGUsIGNhdXNlIHRoZSBydW5uaW5nIGNvbmZpZ3VyZSB0byBiZSBhYm9ydGVkCisrIyBieSBkZWZhdWx0IGlmIHRoZSAncm0nIHByb2dyYW0gaW4gdXNlIGRvZXNuJ3QgbWF0Y2ggb3VyIGV4cGVjdGF0aW9uczsgdGhlCisrIyB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSB0aGlzIHRob3VnaC4KKytpZiBybSAtZiAmJiBybSAtZnIgJiYgcm0gLXJmOyB0aGVuIDogT0s7IGVsc2UKKysgIGNhdCA+JjIgPDwnRU5EJworK09vcHMhCisrCisrWW91ciAncm0nIHByb2dyYW0gc2VlbXMgdW5hYmxlIHRvIHJ1biB3aXRob3V0IGZpbGUgb3BlcmFuZHMgc3BlY2lmaWVkCisrb24gdGhlIGNvbW1hbmQgbGluZSwgZXZlbiB3aGVuIHRoZSAnLWYnIG9wdGlvbiBpcyBwcmVzZW50LiAgVGhpcyBpcyBjb250cmFyeQorK3RvIHRoZSBiZWhhdmlvdXIgb2YgbW9zdCBybSBwcm9ncmFtcyBvdXQgdGhlcmUsIGFuZCBub3QgY29uZm9ybWluZyB3aXRoCisrdGhlIHVwY29taW5nIFBPU0lYIHN0YW5kYXJkOiA8aHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NTQyPgorKworK1BsZWFzZSB0ZWxsIGJ1Zy1hdXRvbWFrZUBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIHZhbHVlCisrb2YgeW91ciAkUEFUSCBhbmQgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLiAgVGhpcworK2NhbiBoZWxwIHVzIGltcHJvdmUgZnV0dXJlIGF1dG9tYWtlIHZlcnNpb25zLgorKworK0VORAorKyAgaWYgdGVzdCB4IiRBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSIgPSB4InllcyI7IHRoZW4KKysgICAgZWNobyAnQ29uZmlndXJhdGlvbiB3aWxsIHByb2NlZWQgYW55d2F5LCBzaW5jZSB5b3UgaGF2ZSBzZXQgdGhlJyA+JjIKKysgICAgZWNobyAnQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0gdmFyaWFibGUgdG8gInllcyInID4mMgorKyAgICBlY2hvID4mMgorKyAgZWxzZQorKyAgICBjYXQgPiYyIDw8J0VORCcKKytBYm9ydGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB0byBlbnN1cmUgeW91IHRha2Ugbm90aWNlIG9mIHRoZSBpc3N1ZS4KKysKKytZb3UgY2FuIGRvd25sb2FkIGFuZCBpbnN0YWxsIEdOVSBjb3JldXRpbHMgdG8gZ2V0IGFuICdybScgaW1wbGVtZW50YXRpb24KKyt0aGF0IGJlaGF2ZXMgcHJvcGVybHk6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4uCisrCisrSWYgeW91IHdhbnQgdG8gY29tcGxldGUgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB1c2luZyB5b3VyIHByb2JsZW1hdGljCisrJ3JtJyBhbnl3YXksIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0KKyt0byAieWVzIiwgYW5kIHJlLXJ1biBjb25maWd1cmUuCisrCisrRU5ECisrICAgIEFDX01TR19FUlJPUihbWW91ciAncm0nIHByb2dyYW0gaXMgYmFkLCBzb3JyeS5dKQorKyAgZmkKKytmaV0pCisgCisrZG5sIEhvb2sgaW50byAnX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAorK2RubCBhZGQgdGhlIGNvbmRpdGlvbmFsIHJpZ2h0IGhlcmUsIGFzIF9BQ19DT01QSUxFUl9FWEVFWFQgbWF5IGJlIGZ1cnRoZXIKKytkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCisrbTRfZGVmbihbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW200X3Byb3ZpZGUoW19BTV9DT01QSUxFUl9FWEVFWFRdKV0pCisgCisgIyBXaGVuIGNvbmZpZy5zdGF0dXMgZ2VuZXJhdGVzIGEgaGVhZGVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUgc3RhbXAtaCBmaWxlLgorICMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCitAQCAtODQxMCw3ICs2MDIsNyBAQCBmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyBkb25lCisgZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorIAorLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTg0MjEsMTcgKzYxMywyMiBAQCBlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YEFTX0RJUk5BTUUoWyIkX2FtX2FyZyJdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jbworICMgRGVmaW5lICRpbnN0YWxsX3NoLgorIEFDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAorIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCistaW5zdGFsbF9zaD0ke2luc3RhbGxfc2gtIlwkKFNIRUxMKSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIn0KKy1BQ19TVUJTVChpbnN0YWxsX3NoKV0pCisraWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKysgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKysgICpcICogfCAqXAkqKQorKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworKyAgKikKKysgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisrICBlc2FjCisrZmkKKytBQ19TVUJTVChbaW5zdGFsbF9zaF0pXSkKKyAKKy0jIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCAyCistCisgIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcworICMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorIEFDX0RFRlVOKFtBTV9TRVRfTEVBRElOR19ET1RdLAorQEAgLTg0NDgsNDIgKzY0NSw0NyBAQCBBQ19TVUJTVChbYW1fX2xlYWRpbmdfZG90XSldKQorICMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyAjIEZyb20gSmltIE1leWVyaW5nCisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKy0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNAorLQorKyMgQU1fTUFJTlRBSU5FUl9NT0RFKFtERUZBVUxULU1PREVdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ29udHJvbCBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4KKysjIERlZmF1bHQgaXMgdG8gZGlzYWJsZSB0aGVtLCB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkIGxpdGVyYWxseS4KKysjIEZvciBzeW1tZXRyeSwgJ2Rpc2FibGUnIG1heSBiZSBwYXNzZWQgYXMgd2VsbC4gIEFueXdheSwgdGhlIHVzZXIKKysjIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB3aXRoIHRoZSAtLWVuYWJsZS8tLWRpc2FibGUgc3dpdGNoLgorIEFDX0RFRlVOKFtBTV9NQUlOVEFJTkVSX01PREVdLAorLVtBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKy0gIGRubCBtYWludGFpbmVyLW1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAorLSAgQUNfQVJHX0VOQUJMRShtYWludGFpbmVyLW1vZGUsCistWyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKy0JCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAorLSAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbCwKKy0gICAgICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vKQorK1ttNF9jYXNlKG00X2RlZmF1bHQoWyQxXSwgW2Rpc2FibGVdKSwKKysgICAgICAgW2VuYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZGlzYWJsZV0pXSwKKysgICAgICAgW2Rpc2FibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pXSwKKysgICAgICAgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKQorKyAgICAgICAgbTRfd2Fybihbc3ludGF4XSwgW3VuZXhwZWN0ZWQgYXJndW1lbnQgdG8gQU1AJnRAX01BSU5UQUlORVJfTU9ERTogJDFdKV0pCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCisrICBkbmwgbWFpbnRhaW5lci1tb2RlJ3MgZGVmYXVsdCBpcyAnZGlzYWJsZScgdW5sZXNzICdlbmFibGUnIGlzIHBhc3NlZAorKyAgQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLV1hbV9tYWludGFpbmVyX290aGVyWy1tYWludGFpbmVyLW1vZGVdLAorKyAgICAgIGFtX21haW50YWluZXJfb3RoZXJbIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisrICAgICAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcl0pXSwKKysgICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCisrICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPV1tNF9pZihhbV9tYWludGFpbmVyX290aGVyLCBbZW5hYmxlXSwgW25vXSwgW3llc10pKQorICAgQUNfTVNHX1JFU1VMVChbJFVTRV9NQUlOVEFJTkVSX01PREVdKQorLSAgQU1fQ09ORElUSU9OQUwoTUFJTlRBSU5FUl9NT0RFLCBbdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllc10pCisrICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICAgTUFJTlQ9JE1BSU5UQUlORVJfTU9ERV9UUlVFCistICBBQ19TVUJTVChNQUlOVClkbmwKKysgIEFDX1NVQlNUKFtNQUlOVF0pZG5sCisgXQorICkKKyAKKy1BVV9ERUZVTihbam1fTUFJTlRBSU5FUl9NT0RFXSwgW0FNX01BSU5UQUlORVJfTU9ERV0pCistCisgIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyAKKy0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCAzCistCisgIyBBTV9NQUtFX0lOQ0xVREUoKQorICMgLS0tLS0tLS0tLS0tLS0tLS0KKyAjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitAQCAtODQ5MSw3ICs2OTMsNyBAQCBBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKKyBbYW1fbWFrZT0ke01BS0UtbWFrZX0KKyBjYXQgPiBjb25maW5jIDw8ICdFTkQnCisgYW1fX2RvaXQ6CistCUBlY2hvIGRvbmUKKysJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisgLlBIT05ZOiBhbV9fZG9pdAorIEVORAorICMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK0BAIC04NTAxLDI0ICs3MDMsMjQgQEAgYW1fX3F1b3RlPQorIF9hbV9yZXN1bHQ9bm9uZQorICMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCisgZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKKy0jIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCistIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAorLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCistIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCistaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCistICAgYW1fX2luY2x1ZGU9aW5jbHVkZQorLSAgIGFtX19xdW90ZT0KKy0gICBfYW1fcmVzdWx0PUdOVQorLWZpCisrIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgorK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisrKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisrICBhbV9faW5jbHVkZT1pbmNsdWRlCisrICBhbV9fcXVvdGU9CisrICBfYW1fcmVzdWx0PUdOVQorKyAgOzsKKytlc2FjCisgIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCisgaWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKy0gICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCistICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKy0gICAgICBhbV9fcXVvdGU9IlwiIgorLSAgICAgIF9hbV9yZXN1bHQ9QlNECistICAgZmkKKysgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKysgICAgIGFtX19xdW90ZT0iXCIiCisrICAgICBfYW1fcmVzdWx0PUJTRAorKyAgICAgOzsKKysgICBlc2FjCisgZmkKKyBBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorIEFDX1NVQlNUKFthbV9fcXVvdGVdKQorQEAgLTg1MjYsNTEgKzcyOCwxNCBAQCBBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCisgcm0gLWYgY29uZmluYyBjb25mbWYKKyBdKQorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1CistIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKy0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy0jIHNlcmlhbCA1CistCistIyBBTV9QUk9HX0NDX0NfTworLSMgLS0tLS0tLS0tLS0tLS0KKy0jIExpa2UgQUNfUFJPR19DQ19DX08sIGJ1dCBjaGFuZ2VkIGZvciBhdXRvbWFrZS4KKy1BQ19ERUZVTihbQU1fUFJPR19DQ19DX09dLAorLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDX0NfT10pZG5sCistQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorLUFDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbXBpbGVdKWRubAorLSMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorLSMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5LgorLXNldCBkdW1teSAkQ0MKKy1hY19jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCistICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKy0gICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorLSAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorLSAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKy0gICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorLSAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKKy1maQorLWRubCBNYWtlIHN1cmUgQUNfUFJPR19DQyBpcyBuZXZlciBjYWxsZWQgYWdhaW4sIG9yIGl0IHdpbGwgb3ZlcnJpZGUgb3VyCistZG5sIHNldHRpbmcgb2YgQ0MuCistbTRfZGVmaW5lKFtBQ19QUk9HX0NDXSwKKy0gICAgICAgICAgW200X2ZhdGFsKFtBQ19QUk9HX0NDIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgQU1fUFJPR19DQ19DX09dKV0pCistXSkKKy0KKyAjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUKKy0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNQorLQorICMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKK0BAIC04NTc4LDc2ICs3NDMsNTQgQEAgQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCisgJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CisgQUNfU1VCU1QoJDEpXSkKKyAKKy0KKyAjIEFNX01JU1NJTkdfSEFTX1JVTgorICMgLS0tLS0tLS0tLS0tLS0tLS0tCistIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgc3VwcG9ydHMgLS1ydW4uCistIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCisrIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgaXMgbW9kZXJuIGVub3VnaC4KKysjIElmIGl0IGlzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCisgQUNfREVGVU4oW0FNX01JU1NJTkdfSEFTX1JVTl0sCisgW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKKyBBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKKy10ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKytpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKysgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKysgICpcICogfCAqXAkqKQorKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisrICAqKQorKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKysgIGVzYWMKKytmaQorICMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAorLWlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCistICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorK2lmIGV2YWwgIiRNSVNTSU5HIC0taXMtbGlnaHR3ZWlnaHQiOyB0aGVuCisrICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgorIGVsc2UKKyAgIGFtX21pc3NpbmdfcnVuPQorLSAgQUNfTVNHX1dBUk4oW2BtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKKysgIEFDX01TR19XQVJOKFsnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCisgZmkKKyBdKQorIAorLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKy0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy0jIEFNX1BST0dfTUtESVJfUAorLSMgLS0tLS0tLS0tLS0tLS0tCistIyBDaGVjayBmb3IgYG1rZGlyIC1wJy4KKy1BQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKKy1bQUNfUFJFUkVRKFsyLjYwXSlkbmwKKy1BQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorLWRubCBBdXRvbWFrZSAxLjggdG8gMS45LjYgdXNlZCB0byBkZWZpbmUgbWtkaXJfcC4gIFdlIG5vdyB1c2UgTUtESVJfUCwKKy1kbmwgd2hpbGUga2VlcGluZyBhIGRlZmluaXRpb24gb2YgbWtkaXJfcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKy1kbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCistZG5sIEhvd2V2ZXIgd2UgY2Fubm90IGRlZmluZSBta2Rpcl9wIGFzICQoTUtESVJfUCkgZm9yIHRoZSBzYWtlIG9mCistZG5sIE1ha2VmaWxlLmlucyB0aGF0IGRvIG5vdCBkZWZpbmUgTUtESVJfUCwgc28gd2UgZG8gb3VyIG93bgorLWRubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KKy1kbmwgTUtESVJfUCkuCistQUNfU1VCU1QoW21rZGlyX3BdLCBbIiRNS0RJUl9QIl0pZG5sCistY2FzZSAkbWtkaXJfcCBpbgorLSAgW1tcXC8kXV0qIHwgPzpbW1xcL11dKikgOzsKKy0gICovKikgbWtkaXJfcD0iXCQodG9wX2J1aWxkZGlyKS8kbWtkaXJfcCIgOzsKKy1lc2FjCistXSkKKy0KKyAjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisgCistIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgMworLQorICMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKKyBbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKyAKKyAjIF9BTV9TRVRfT1BUSU9OKE5BTUUpCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCisgQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKKy1bbTRfZGVmaW5lKF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCAxKV0pCisrW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWzFdKV0pCisgCisgIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgT1BUSU9OUyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEF1dG9tYWtlIG9wdGlvbnMuCisgQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCistW0FDX0ZPUkVBQ0goW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCisrW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKyAKKyAjIF9BTV9JRl9PUFRJT04oT1BUSU9OLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BAIC04NjU1LDQ3ICs3OTgsMTI2IEBAIEFDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorIEFDX0RFRlVOKFtfQU1fSUZfT1BUSU9OXSwKKyBbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKyAKKy0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCisrIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKysjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysKKysjIF9BTV9QUk9HX0NDX0NfTworKyMgLS0tLS0tLS0tLS0tLS0tCisrIyBMaWtlIEFDX1BST0dfQ0NfQ19PLCBidXQgY2hhbmdlZCBmb3IgYXV0b21ha2UuICBXZSByZXdyaXRlIEFDX1BST0dfQ0MKKysjIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGlzLgorK0FDX0RFRlVOKFtfQU1fUFJPR19DQ19DX09dLAorK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCisrQUNfUkVRVUlSRV9BVVhfRklMRShbY29tcGlsZV0pZG5sCisrQUNfTEFOR19QVVNIKFtDXSlkbmwKKytBQ19DQUNIRV9DSEVDSygKKysgIFt3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXJdLAorKyAgW2FtX2N2X3Byb2dfY2NfY19vXSwKKysgIFtBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKKysgICMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorKyAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQorKyAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCisrICAjIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KKysgIGFtX2N2X3Byb2dfY2NfY19vPXllcworKyAgZm9yIGFtX2kgaW4gMSAyOyBkbworKyAgICBpZiBBTV9SVU5fTE9HKFskQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dF0pIFwKKysgICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCisrICAgICAgOiBPSworKyAgICBlbHNlCisrICAgICAgYW1fY3ZfcHJvZ19jY19jX289bm8KKysgICAgICBicmVhaworKyAgICBmaQorKyAgZG9uZQorKyAgcm0gLWYgY29yZSBjb25mdGVzdCoKKysgIHVuc2V0IGFtX2ldKQorK2lmIHRlc3QgIiRhbV9jdl9wcm9nX2NjX2NfbyIgIT0geWVzOyB0aGVuCisrICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKysgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKysgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKKytmaQorK0FDX0xBTkdfUE9QKFtDXSldKQorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA1CistIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorK0FDX0RFRlVOX09OQ0UoW0FNX1BST0dfQ0NfQ19PXSwgW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKV0pCisrCisrIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA0CisrIyBBTV9SVU5fTE9HKENPTU1BTkQpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBSdW4gQ09NTUFORCwgc2F2ZSB0aGUgZXhpdCBzdGF0dXMgaW4gYWNfc3RhdHVzLCBhbmQgbG9nIGl0LgorKyMgKFRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIEF1dG9jb25mJ3MgX0FDX1JVTl9MT0cgbWFjcm8uKQorK0FDX0RFRlVOKFtBTV9SVU5fTE9HXSwKKytbeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJDEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAoJDEpID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICBhY19zdGF0dXM9JD8KKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgIChleGl0ICRhY19zdGF0dXMpOyB9XSkKKysKKysjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCisrCisrIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKysjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKyAjIEFNX1NBTklUWV9DSEVDSworICMgLS0tLS0tLS0tLS0tLS0tCisgQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCisgW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKKy0jIEp1c3QgaW4gY2FzZQorLXNsZWVwIDEKKy1lY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKy0jIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisrIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKysjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCisrYW1fbGY9JworKycKKytjYXNlIGBwd2RgIGluCisrICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZl1dKikKKysgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKKytlc2FjCisrY2FzZSAkc3JjZGlyIGluCisrICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisrICAgIEFDX01TR19FUlJPUihbdW5zYWZlIHNyY2RpciB2YWx1ZTogJyRzcmNkaXInXSk7OworK2VzYWMKKysKKysjIERvICdzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisgIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisgIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworICMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisgIyBkaXJlY3RvcnkpLgorIGlmICgKKy0gICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorLSAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCistICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKy0gICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKy0gICBmaQorLSAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKKy0gICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCistICAgICAgJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKy0KKy0gICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCistICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorLSAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKy0gICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCistICAgICAgQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCistYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCistICAgZmkKKy0KKysgICBhbV9oYXNfc2xlcHQ9bm8KKysgICBmb3IgYW1fdHJ5IGluIDEgMjsgZG8KKysgICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQorKyAgICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorKyAgICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KKysJIyAtTCBkaWRuJ3Qgd29yay4KKysJc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKysgICAgIGZpCisrICAgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisrCSYmIHRlc3QgIiRbKl0iICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisrCisrCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKysJIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorKwkjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisrCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKysJQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCisrICBhbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKysgICAgIGZpCisrICAgICBpZiB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUgfHwgdGVzdCAkYW1fdHJ5IC1lcSAyOyB0aGVuCisrICAgICAgIGJyZWFrCisrICAgICBmaQorKyAgICAgIyBKdXN0IGluIGNhc2UuCisrICAgICBzbGVlcCAxCisrICAgICBhbV9oYXNfc2xlcHQ9eWVzCisrICAgZG9uZQorICAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgICkKKyB0aGVuCitAQCAtODcwNSw5ICs5MjcsODUgQEAgZWxzZQorICAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCisgQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQorIGZpCistQUNfTVNHX1JFU1VMVCh5ZXMpXSkKKytBQ19NU0dfUkVTVUxUKFt5ZXNdKQorKyMgSWYgd2UgZGlkbid0IHNsZWVwLCB3ZSBzdGlsbCBuZWVkIHRvIGVuc3VyZSB0aW1lIHN0YW1wcyBvZiBjb25maWcuc3RhdHVzIGFuZAorKyMgZ2VuZXJhdGVkIGZpbGVzIGFyZSBzdHJpY3RseSBuZXdlci4KKythbV9zbGVlcF9waWQ9CisraWYgZ3JlcCAnc2xlcHQ6IG5vJyBjb25mdGVzdC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgKCBzbGVlcCAxICkgJgorKyAgYW1fc2xlZXBfcGlkPSQhCisrZmkKKytBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorKyAgW0FDX01TR19DSEVDS0lORyhbdGhhdCBnZW5lcmF0ZWQgZmlsZXMgYXJlIG5ld2VyIHRoYW4gY29uZmlndXJlXSkKKysgICBpZiB0ZXN0IC1uICIkYW1fc2xlZXBfcGlkIjsgdGhlbgorKyAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgorKyAgICAgd2FpdCAkYW1fc2xlZXBfcGlkIDI+L2Rldi9udWxsCisrICAgZmkKKysgICBBQ19NU0dfUkVTVUxUKFtkb25lXSldKQorK3JtIC1mIGNvbmZ0ZXN0LmZpbGUKKytdKQorKworKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrIyBBTV9TSUxFTlRfUlVMRVMoW0RFRkFVTFRdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKKysjICgieWVzIiBiZWluZyBsZXNzIHZlcmJvc2UsICJubyIgb3IgZW1wdHkgYmVpbmcgdmVyYm9zZSkuCisrQUNfREVGVU4oW0FNX1NJTEVOVF9SVUxFU10sCisrW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sIFtkbmwKKytBU19IRUxQX1NUUklORygKKysgIFstLWVuYWJsZS1zaWxlbnQtcnVsZXNdLAorKyAgW2xlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpXSkKKytBU19IRUxQX1NUUklORygKKysgIFstLWRpc2FibGUtc2lsZW50LXJ1bGVzXSwKKysgIFt2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIildKWRubAorK10pCisrY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiBAJTpAICgoKAorKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKysgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisrICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPW00X2lmKFskMV0sIFt5ZXNdLCBbMF0sIFsxXSk7OworK2VzYWMKKytkbmwKKytkbmwgQSBmZXcgJ21ha2UnIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgTm9uU3RvcCBPUyBhbmQgTmV4dFN0ZXApCisrZG5sIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCB2YXJpYWJsZSBleHBhbnNpb25zLgorK2RubCBTZWUgYXV0b21ha2UgYnVnIzk5MjggYW5kIGJ1ZyMxMDIzNy4KKythbV9tYWtlPSR7TUFLRS1tYWtlfQorK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXNdLAorKyAgIFthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlc10sCisrICAgW2lmIEFTX0VDSE8oW1snVFJVRT0kKEJBUiQoVikpCisrQkFSMD1mYWxzZQorK0JBUjE9dHJ1ZQorK1Y9MQorK2FtX19kb2l0OgorKwlAJChUUlVFKQorKy5QSE9OWTogYW1fX2RvaXQnXV0pIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworK2Vsc2UKKysgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCisrZmldKQorK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisrICBkbmwgVXNpbmcgJyRWJyBpbnN0ZWFkIG9mICckKFYpJyBicmVha3MgSVJJWCBtYWtlLgorKyAgQU1fVj0nJChWKScKKysgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCisrZWxzZQorKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKysgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKytmaQorK0FDX1NVQlNUKFtBTV9WXSlkbmwKKytBTV9TVUJTVF9OT1RNQUtFKFtBTV9WXSlkbmwKKytBQ19TVUJTVChbQU1fREVGQVVMVF9WXSlkbmwKKytBTV9TVUJTVF9OT1RNQUtFKFtBTV9ERUZBVUxUX1ZdKWRubAorK0FDX1NVQlNUKFtBTV9ERUZBVUxUX1ZFUkJPU0lUWV0pZG5sCisrQU1fQkFDS1NMQVNIPSdcJworK0FDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAorK19BTV9TVUJTVF9OT1RNQUtFKFtBTV9CQUNLU0xBU0hdKWRubAorK10pCisgCistIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtODcxNSwyNyArMTAxMywyNyBAQCBBQ19NU0dfUkVTVUxUKHllcyldKQorIAorICMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciBgaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorKyMgT25lIGlzc3VlIHdpdGggdmVuZG9yICdpbnN0YWxsJyAoZXZlbiBHTlUpIGlzIHRoYXQgeW91IGNhbid0CisgIyBzcGVjaWZ5IHRoZSBwcm9ncmFtIHVzZWQgdG8gc3RyaXAgYmluYXJpZXMuICBUaGlzIGlzIGVzcGVjaWFsbHkKKyAjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisgIyBpcyB1bmxpa2VseSB0byBoYW5kbGUgdGhlIGhvc3QncyBiaW5hcmllcy4KKyAjIEZvcnR1bmF0ZWx5IGluc3RhbGwtc2ggd2lsbCBob25vciBhIFNUUklQUFJPRyB2YXJpYWJsZSwgc28gd2UKKy0jIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKysjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiAibWFrZSBpbnN0YWxsLXN0cmlwIiwgYW5kIGluaXRpYWxpemUKKyAjIFNUUklQUFJPRyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgU1RSSVAgdmFyaWFibGUgKHNldCBieSB0aGUgdXNlcikuCisgQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCisgW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCistIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCistIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgorKyMgcnVuICJtYWtlIGluc3RhbGwtc3RyaXAiLiAgSG93ZXZlciAnc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyAjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCistIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KKy1kbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgorKyMgd2lsbCBob25vciB0aGUgJ1NUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCisrZG5sIERvbid0IHRlc3QgZm9yICRjcm9zc19jb21waWxpbmcgPSB5ZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgJ21heWJlJy4KKyBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorIGZpCisgSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKKyBBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQorIAorLSMgQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTg3NDcsMjAgKzEwNDUsMjMgQEAgQUNfU1VCU1QoW0lOU1RBTExfU1RSSVBfUFJPR1JBTV0pXSkKKyAjIFRoaXMgbWFjcm8gaXMgdHJhY2VkIGJ5IEF1dG9tYWtlLgorIEFDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCisgCisrIyBBTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCisrQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKKysKKyAjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisgCistIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgMgorLQorICMgX0FNX1BST0dfVEFSKEZPUk1BVCkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgorLSMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgYHY3JywgYHVzdGFyJywgb3IgYHBheCcuCisrIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiAndjcnLCAndXN0YXInLCBvciAncGF4Jy4KKyAjCisgIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdGFyKSB0aGF0IGlzIGEgY29tbWFuZAorICMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKK0BAIC04NzcwLDM1NyArMTA3MSwxMjEgQEAgQUNfREVGVU4oW19BTV9TVUJTVF9OT1RNQUtFXSkKKyAjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKKyAjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCisgIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorLUFDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAorLVsjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCistQU1fTUlTU0lOR19QUk9HKFtBTVRBUl0sIFt0YXJdKQorLW00X2lmKFskMV0sIFt2N10sCistICAgICBbYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nXSwKKy0gICAgIFttNF9jYXNlKFskMV0sIFt1c3Rhcl0sLCBbcGF4XSwsCistICAgICAgICAgICAgICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCistIyBMb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorLV9hbV90b29scz0nZ251dGFyIG00X2lmKFskMV0sIFt1c3Rhcl0sIFtwbGFpbnRhcl0pIHBheCBjcGlvIG5vbmUnCistX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKy0jIERvIG5vdCBmb2xkIHRoZSBhYm92ZSB0d28gbGluZSBpbnRvIG9uZSwgYmVjYXVzZSBUcnU2NCBzaCBhbmQKKy0jIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiBgLScuCistZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKKy1kbworLSAgY2FzZSAkX2FtX3Rvb2wgaW4KKy0gIGdudXRhcikKKy0gICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOworLSAgICBkbworLSAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCistICAgIGRvbmUKKy0gICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCistICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworLSAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgorLSAgICA7OworLSAgcGxhaW50YXIpCistICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCistICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCistICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKy0gICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCistICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworLSAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworLSAgICA7OworLSAgcGF4KQorLSAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKy0gICAgYW1fX3Rhcl89J3BheCAtTCAteCAkMSAtdyAiJHRhcmRpciInCistICAgIGFtX191bnRhcj0ncGF4IC1yJworLSAgICA7OworLSAgY3BpbykKKy0gICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCistICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworLSAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggJDEgLWQnCistICAgIDs7CistICBub25lKQorLSAgICBhbV9fdGFyPWZhbHNlCistICAgIGFtX190YXJfPWZhbHNlCistICAgIGFtX191bnRhcj1mYWxzZQorLSAgICA7OworLSAgZXNhYworLQorLSAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKKy0gICMgYW5kIGFtX191bnRhciBzZXQuCistICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKy0KKy0gICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcworLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorLSAgbWtkaXIgY29uZnRlc3QuZGlyCistICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCistICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorLSAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKy0gICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKy0gICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCistICBmaQorLWRvbmUKKy1ybSAtcmYgY29uZnRlc3QuZGlyCistCistQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorLUFDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKKy1BQ19TVUJTVChbYW1fX3Rhcl0pCistQUNfU1VCU1QoW2FtX191bnRhcl0pCistXSkgIyBfQU1fUFJPR19UQVIKKy0KKy0jCistIyBTWU5PUFNJUworLSMKKy0jICAgQUNYX1BUSFJFQUQoW0FDVElPTi1JRi1GT1VORFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKKy0jCistIyBERVNDUklQVElPTgorLSMKKy0jICAgVGhpcyBtYWNybyBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgQyBwcm9ncmFtcyB1c2luZyBQT1NJWCB0aHJlYWRzLgorLSMgICBJdCBzZXRzIHRoZSBQVEhSRUFEX0xJQlMgb3V0cHV0IHZhcmlhYmxlIHRvIHRoZSB0aHJlYWRzIGxpYnJhcnkgYW5kCistIyAgIGxpbmtlciBmbGFncywgYW5kIHRoZSBQVEhSRUFEX0NGTEFHUyBvdXRwdXQgdmFyaWFibGUgdG8gYW55IHNwZWNpYWwKKy0jICAgQyBjb21waWxlciBmbGFncyB0aGF0IGFyZSBuZWVkZWQuIChUaGUgdXNlciBjYW4gYWxzbyBmb3JjZSBjZXJ0YWluCistIyAgIGNvbXBpbGVyIGZsYWdzL2xpYnMgdG8gYmUgdGVzdGVkIGJ5IHNldHRpbmcgdGhlc2UgZW52aXJvbm1lbnQKKy0jICAgdmFyaWFibGVzLikKKy0jCistIyAgIEFsc28gc2V0cyBQVEhSRUFEX0NDIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIgdGhhdCBpcyBuZWVkZWQgZm9yCistIyAgIG11bHRpLXRocmVhZGVkIHByb2dyYW1zIChkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgQ0Mgb3RoZXJ3aXNlKS4KKy0jICAgKFRoaXMgaXMgbmVjZXNzYXJ5IG9uIEFJWCB0byB1c2UgdGhlIHNwZWNpYWwgY2NfciBjb21waWxlciBhbGlhcy4pCistIworLSMgICBOT1RFOiBZb3UgYXJlIGFzc3VtZWQgdG8gbm90IG9ubHkgY29tcGlsZSB5b3VyIHByb2dyYW0gd2l0aCB0aGVzZQorLSMgICBmbGFncywgYnV0IGFsc28gbGluayBpdCB3aXRoIHRoZW0gYXMgd2VsbC4gZS5nLiB5b3Ugc2hvdWxkIGxpbmsKKy0jICAgd2l0aCAkUFRIUkVBRF9DQyAkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyAkTERGTEFHUyAuLi4gJFBUSFJFQURfTElCUworLSMgICAkTElCUworLSMKKy0jICAgSWYgeW91IGFyZSBvbmx5IGJ1aWxkaW5nIHRocmVhZHMgcHJvZ3JhbXMsIHlvdSBtYXkgd2lzaCB0byB1c2UKKy0jICAgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKKy0jCistIyAgICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorLSMgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKy0jICAgICAgICAgIENDPSIkUFRIUkVBRF9DQyIKKy0jCistIyAgIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZQorLSMgICBjb25zdGFudCBoYXMgYSBub25zdGFuZGFyZCBuYW1lLCBkZWZpbmVzIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHRvCistIyAgIHRoYXQgbmFtZSAoZS5nLiBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEIG9uIEFJWCkuCistIworLSMgICBBQ1RJT04tSUYtRk9VTkQgaXMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRvIHJ1biBpZiBhIHRocmVhZHMKKy0jICAgbGlicmFyeSBpcyBmb3VuZCwgYW5kIEFDVElPTi1JRi1OT1QtRk9VTkQgaXMgYSBsaXN0IG9mIGNvbW1hbmRzIHRvCistIyAgIHJ1biBpdCBpZiBpdCBpcyBub3QgZm91bmQuIElmIEFDVElPTi1JRi1GT1VORCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUKKy0jICAgZGVmYXVsdCBhY3Rpb24gd2lsbCBkZWZpbmUgSEFWRV9QVEhSRUFELgorLSMKKy0jICAgUGxlYXNlIGxldCB0aGUgYXV0aG9ycyBrbm93IGlmIHRoaXMgbWFjcm8gZmFpbHMgb24gYW55IHBsYXRmb3JtLCBvcgorLSMgICBpZiB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnMgb3IgY29tbWVudHMuIFRoaXMgbWFjcm8gd2FzIGJhc2VkCistIyAgIG9uIHdvcmsgYnkgU0dKIG9uIGF1dG9jb25mIHNjcmlwdHMgZm9yIEZGVFcgKGh0dHA6Ly93d3cuZmZ0dy5vcmcvKQorLSMgICAod2l0aCBoZWxwIGZyb20gTS4gRnJpZ28pLCBhcyB3ZWxsIGFzIGFjX3B0aHJlYWQgYW5kIGhiX3B0aHJlYWQKKy0jICAgbWFjcm9zIHBvc3RlZCBieSBBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2byB0byB0aGUgYXV0b2NvbmYgbWFjcm8KKy0jICAgcmVwb3NpdG9yeS4gV2UgYXJlIGFsc28gZ3JhdGVmdWwgZm9yIHRoZSBoZWxwZnVsIGZlZWRiYWNrIG9mCistIyAgIG51bWVyb3VzIHVzZXJzLgorLSMKKy0jIExBU1QgTU9ESUZJQ0FUSU9OCisgIworLSMgICAyMDA2LTA1LTI5CistIworLSMgQ09QWUxFRlQKKy0jCistIyAgIENvcHlyaWdodCAoYykgMjAwNiBTdGV2ZW4gRy4gSm9obnNvbiA8c3RldmVuakBhbHVtLm1pdC5lZHU+CistIworLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistIyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCistIyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorLSMgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLSMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKy0jICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCistIyAgIDAyMTExLTEzMDcsIFVTQS4KKy0jCistIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0CistIyAgIG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUKKy0jICAgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcKKy0jICAgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCistIyAgIExpY2Vuc2Ugd2hlbiB1c2luZyBvciBkaXN0cmlidXRpbmcgc3VjaCBzY3JpcHRzLCBldmVuIHRob3VnaAorLSMgICBwb3J0aW9ucyBvZiB0aGUgdGV4dCBvZiB0aGUgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbAorLSMgICBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybiBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0CistIyAgIGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KKy0jCistIyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorLSMgICBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgTWFjcm8gQXJjaGl2ZS4gV2hlbiB5b3UKKy0jICAgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UKKy0jICAgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91cgorLSMgICBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwuCistCistQUNfREVGVU4oW0FDWF9QVEhSRUFEXSwgWworLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy1BQ19MQU5HX1NBVkUKKy1BQ19MQU5HX0MKKy1hY3hfcHRocmVhZF9vaz1ubworLQorLSMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKKy0jIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1ZTY0IG9yIFNlcXVlbnQpLgorLSMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKy0KKy0jIEZpcnN0IG9mIGFsbCwgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgb2YgdGhlIFBUSFJFQURfTElCUywKKy0jIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworLSMgdGhlbToKKy1pZiB0ZXN0IHgiJFBUSFJFQURfTElCUyRQVEhSRUFEX0NGTEFHUyIgIT0geDsgdGhlbgorLSAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorLSAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCistICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwdGhyZWFkX2pvaW4gaW4gTElCUz0kUFRIUkVBRF9MSUJTIHdpdGggQ0ZMQUdTPSRQVEhSRUFEX0NGTEFHU10pCistICAgICAgICBBQ19UUllfTElOS19GVU5DKHB0aHJlYWRfam9pbiwgYWN4X3B0aHJlYWRfb2s9eWVzKQorLSAgICAgICAgQUNfTVNHX1JFU1VMVCgkYWN4X3B0aHJlYWRfb2spCistICAgICAgICBpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKy0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKy0gICAgICAgIGZpCistICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorLSAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCistZmkKKy0KKy0jIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CistIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCistIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKKy0jIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCistCistIyBDcmVhdGUgYSBsaXN0IG9mIHRocmVhZCBmbGFncyB0byB0cnkuICBJdGVtcyBzdGFydGluZyB3aXRoIGEgIi0iIGFyZQorLSMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorLSMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKKy0jIHdoaWNoIGlzIGEgcHJvZ3JhbSByZXR1cm5pbmcgdGhlIGZsYWdzIGZvciB0aGUgUHRoIGVtdWxhdGlvbiBsaWJyYXJ5LgorLQorLWFjeF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1LdGhyZWFkIC1rdGhyZWFkIGx0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhyZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgorLQorLSMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKy0jIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgorLQorLSMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCistIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCistIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworLSMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQorLSMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRocmVhZCBzaW5jZSBTTVAtYWJsZSkKKy0jIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorLSMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKQorLSMgLXB0aHJlYWRzOiBTb2xhcmlzL2djYworLSMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKy0jIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKKy0jICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVzIGRlZmluZXMgcHRocmVhZHMgdG9vOworLSMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorLSMgICAgICAuLi4gLW10IGlzIGFsc28gdGhlIHB0aHJlYWRzIGZsYWcgZm9yIEhQL2FDQworLSMgcHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCistIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCistIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCistCistY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKy0gICAgICAgICpzb2xhcmlzKikKKy0KKy0gICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCistICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCistICAgICAgICAjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gIChXZSBuZWVkIHRvIGxpbmsgd2l0aCAtcHRocmVhZHMvLW10LworLSAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCistICAgICAgICAjIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQKKy0gICAgICAgICMgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28sCistICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CistCistICAgICAgICBhY3hfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRhY3hfcHRocmVhZF9mbGFncyIKKy0gICAgICAgIDs7CistZXNhYworLQorLWlmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCistZm9yIGZsYWcgaW4gJGFjeF9wdGhyZWFkX2ZsYWdzOyBkbworLQorLSAgICAgICAgY2FzZSAkZmxhZyBpbgorLSAgICAgICAgICAgICAgICBub25lKQorLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFnc10pCistICAgICAgICAgICAgICAgIDs7CistCistICAgICAgICAgICAgICAgIC0qKQorLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRoICRmbGFnXSkKKy0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiRmbGFnIgorLSAgICAgICAgICAgICAgICA7OworLQorLQkJcHRocmVhZC1jb25maWcpCistCQlBQ19DSEVDS19QUk9HKGFjeF9wdGhyZWFkX2NvbmZpZywgcHRocmVhZC1jb25maWcsIHllcywgbm8pCistCQlpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX2NvbmZpZyIgPSB4bm87IHRoZW4gY29udGludWU7IGZpCistCQlQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKy0JCVBUSFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0tbGlic2AiCistCQk7OworLQorLSAgICAgICAgICAgICAgICAqKQorLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnXSkKKy0gICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRmbGFnIgorLSAgICAgICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLQorLSAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorLSAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKy0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCistCistICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIGZ1bmN0aW9ucy4gIFdlIG11c3QgaW5jbHVkZSBwdGhyZWFkLmgsCistICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCistICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKKy0gICAgICAgICMgV2UgY2hlY2sgZm9yIHB0aHJlYWRfam9pbiBiZWNhdXNlIGl0IGlzIGluIC1scHRocmVhZCBvbiBJUklYCistICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKKy0gICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCistICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoIGJlY2F1c2UgaXQgaXMgb25lIG9mIHRoZSBmZXcgcHRocmVhZAorLSAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KKy0gICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KKy0gICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCistICAgICAgICAgICAgICAgICAgICBbcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOworLSAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKy0gICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsgXSwKKy0gICAgICAgICAgICAgICAgICAgIFthY3hfcHRocmVhZF9vaz15ZXNdKQorK0FDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAorK1sjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBZZXMsIGl0J3Mgc3RpbGwgdXNlZAorKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorK0FDX1NVQlNUKFtBTVRBUl0sIFsnJCR7VEFSLXRhcn0nXSkKKyAKKy0gICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCistICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKysjIFdlJ2xsIGxvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCisrX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKKyAKKy0gICAgICAgIEFDX01TR19SRVNVTFQoJGFjeF9wdGhyZWFkX29rKQorLSAgICAgICAgaWYgdGVzdCAieCRhY3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgZmkKKyttNF9pZihbJDFdLCBbdjddLAorKyAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKKysKKysgIFttNF9jYXNlKFskMV0sCisrICAgIFt1c3Rhcl0sCisrICAgICBbIyBUaGUgUE9TSVggMTk4OCAndXN0YXInIGZvcm1hdCBpcyBkZWZpbmVkIHdpdGggZml4ZWQtc2l6ZSBmaWVsZHMuCisrICAgICAgIyBUaGVyZSBpcyBub3RhYmx5IGEgMjEgYml0cyBsaW1pdCBmb3IgdGhlIFVJRCBhbmQgdGhlIEdJRC4gIEluIGZhY3QsCisrICAgICAgIyB0aGUgJ3BheCcgdXRpbGl0eSBjYW4gaGFuZyBvbiBiaWdnZXIgVUlEL0dJRCAoc2VlIGF1dG9tYWtlIGJ1ZyM4MzQzCisrICAgICAgIyBhbmQgYnVnIzEzNTg4KS4KKysgICAgICBhbV9tYXhfdWlkPTIwOTcxNTEgIyAyXjIxIC0gMQorKyAgICAgIGFtX21heF9naWQ9JGFtX21heF91aWQKKysgICAgICAjIFRoZSAkVUlEIGFuZCAkR0lEIHZhcmlhYmxlcyBhcmUgbm90IHBvcnRhYmxlLCBzbyB3ZSBuZWVkIHRvIHJlc29ydAorKyAgICAgICMgdG8gdGhlIFBPU0lYLW1hbmRhdGVkIGlkKDEpIHV0aWxpdHkuICBFcnJvcnMgaW4gdGhlICdpZCcgY2FsbHMKKysgICAgICAjIGJlbG93IGFyZSBkZWZpbml0ZWx5IHVuZXhwZWN0ZWQsIHNvIGFsbG93IHRoZSB1c2VycyB0byBzZWUgdGhlbQorKyAgICAgICMgKHRoYXQgaXMsIGF2b2lkIHN0ZGVyciByZWRpcmVjdGlvbikuCisrICAgICAgYW1fdWlkPWBpZCAtdSB8fCBlY2hvIHVua25vd25gCisrICAgICAgYW1fZ2lkPWBpZCAtZyB8fCBlY2hvIHVua25vd25gCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFVJRCAnJGFtX3VpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdF0pCisrICAgICAgaWYgdGVzdCAkYW1fdWlkIC1sZSAkYW1fbWF4X3VpZDsgdGhlbgorKyAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisrICAgICAgZWxzZQorKyAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKysgICAgICAgICBfYW1fdG9vbHM9bm9uZQorKyAgICAgIGZpCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdJRCAnJGFtX2dpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdF0pCisrICAgICAgaWYgdGVzdCAkYW1fZ2lkIC1sZSAkYW1fbWF4X2dpZDsgdGhlbgorKyAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisrICAgICAgZWxzZQorKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorKyAgICAgICAgX2FtX3Rvb2xzPW5vbmUKKysgICAgICBmaV0sCisgCistICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKy0gICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCistZG9uZQorLWZpCisrICBbcGF4XSwKKysgICAgW10sCisgCistIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKKy1pZiB0ZXN0ICJ4JGFjeF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIHNhdmVfTElCUz0iJExJQlMiCistICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorLSAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorKyAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCisgCistICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgorLQlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZV0pCistCWF0dHJfbmFtZT11bmtub3duCistCWZvciBhdHRyIGluIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQ7IGRvCistCSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLCBbaW50IGF0dHI9JGF0dHI7IHJldHVybiBhdHRyO10sCistICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJfbmFtZT0kYXR0cjsgYnJlYWtdKQorLQlkb25lCistICAgICAgICBBQ19NU0dfUkVTVUxUKCRhdHRyX25hbWUpCistICAgICAgICBpZiB0ZXN0ICIkYXR0cl9uYW1lIiAhPSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRTsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwgJGF0dHJfbmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byBuZWNlc3Nhcnkgc3ltYm9sIGlmIHRoaXMgY29uc3RhbnQKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbiB5b3VyIHN5c3RlbS5dKQorLSAgICAgICAgZmkKKysgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKKyAKKy0gICAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHNdKQorLSAgICAgICAgZmxhZz1ubworLSAgICAgICAgY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKy0gICAgICAgICAgICAqLWFpeCogfCAqLWZyZWVic2QqIHwgKi1kYXJ3aW4qKSBmbGFnPSItRF9USFJFQURfU0FGRSI7OworLSAgICAgICAgICAgICpzb2xhcmlzKiB8ICotb3NmKiB8ICotaHB1eCopIGZsYWc9Ii1EX1JFRU5UUkFOVCI7OworLSAgICAgICAgZXNhYworLSAgICAgICAgQUNfTVNHX1JFU1VMVCgke2ZsYWd9KQorLSAgICAgICAgaWYgdGVzdCAieCRmbGFnIiAhPSB4bm87IHRoZW4KKy0gICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgorLSAgICAgICAgZmkKKysgICMgR28gYWhlYWQgZXZlbiBpZiB3ZSBoYXZlIHRoZSB2YWx1ZSBhbHJlYWR5IGNhY2hlZC4gIFdlIGRvIHNvIGJlY2F1c2Ugd2UKKysgICMgbmVlZCB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlICdhbV9fdGFyJyBhbmQgJ2FtX191bnRhcicgdmFyaWFibGVzLgorKyAgX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKyAKKy0gICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCistICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKysgIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzOyBkbworKyAgICBjYXNlICRfYW1fdG9vbCBpbgorKyAgICBnbnV0YXIpCisrICAgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOyBkbworKyAgICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKKysgICAgICBkb25lCisrICAgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCisrICAgICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCisrICAgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKysgICAgICA7OworKyAgICBwbGFpbnRhcikKKysgICAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorKyAgICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisrICAgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQorKyAgICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworKyAgICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworKyAgICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCisrICAgICAgOzsKKysgICAgcGF4KQorKyAgICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJworKyAgICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworKyAgICAgIGFtX191bnRhcj0ncGF4IC1yJworKyAgICAgIDs7CisrICAgIGNwaW8pCisrICAgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisrICAgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisrICAgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworKyAgICAgIDs7CisrICAgIG5vbmUpCisrICAgICAgYW1fX3Rhcj1mYWxzZQorKyAgICAgIGFtX190YXJfPWZhbHNlCisrICAgICAgYW1fX3VudGFyPWZhbHNlCisrICAgICAgOzsKKysgICAgZXNhYworIAorLSAgICAgICAgIyBNb3JlIEFJWCBsb3NzYWdlOiBtdXN0IGNvbXBpbGUgd2l0aCB4bGNfciBvciBjY19yCistCWlmIHRlc3QgeCIkR0NDIiAhPSB4eWVzOyB0aGVuCistICAgICAgICAgIEFDX0NIRUNLX1BST0dTKFBUSFJFQURfQ0MsIHhsY19yIGNjX3IsICR7Q0N9KQorLSAgICAgICAgZWxzZQorLSAgICAgICAgICBQVEhSRUFEX0NDPSRDQworLQlmaQorLWVsc2UKKy0gICAgICAgIFBUSFJFQURfQ0M9IiRDQyIKKy1maQorKyAgICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorKyAgICAjIGFuZCBhbV9fdW50YXIgc2V0LgorKyAgICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKysKKysgICAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzLgorKyAgICBybSAtcmYgY29uZnRlc3QuZGlyCisrICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorKyAgICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisrICAgIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCisrICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKKysgICAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKysgICAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQorKyAgICAgIEFNX1JVTl9MT0coW2NhdCBjb25mdGVzdC5kaXIvZmlsZV0pCisrICAgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCisrICAgIGZpCisrICBkb25lCisrICBybSAtcmYgY29uZnRlc3QuZGlyCisgCistQUNfU1VCU1QoUFRIUkVBRF9MSUJTKQorLUFDX1NVQlNUKFBUSFJFQURfQ0ZMQUdTKQorLUFDX1NVQlNUKFBUSFJFQURfQ0MpCisrICBBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCisrICBBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCisgCistIyBGaW5hbGx5LCBleGVjdXRlIEFDVElPTi1JRi1GT1VORC9BQ1RJT04tSUYtTk9ULUZPVU5EOgorLWlmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorLSAgICAgICAgaWZlbHNlKFskMV0sLEFDX0RFRklORShIQVZFX1BUSFJFQUQsMSxbRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuXSksWyQxXSkKKy0gICAgICAgIDoKKy1lbHNlCistICAgICAgICBhY3hfcHRocmVhZF9vaz1ubworLSAgICAgICAgJDIKKy1maQorLUFDX0xBTkdfUkVTVE9SRQorLV0pZG5sIEFDWF9QVEhSRUFECisrQUNfU1VCU1QoW2FtX190YXJdKQorK0FDX1NVQlNUKFthbV9fdW50YXJdKQorK10pICMgX0FNX1BST0dfVEFSCisgCisgbTRfaW5jbHVkZShbbTQvYWNpbmNsdWRlLm00XSkKKyttNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKKyttNF9pbmNsdWRlKFttNC9sdG9wdGlvbnMubTRdKQorK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorK200X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCisrbTRfaW5jbHVkZShbbTQvbHR+b2Jzb2xldGUubTRdKQorZGlmZiAtLWdpdCBhL2NvbXBhdC9NYWtlZmlsZS5pbiBiL2NvbXBhdC9NYWtlZmlsZS5pbgoraW5kZXggMGM1YjIzZi4uOTA1NzRjYSAxMDA2NDQKKy0tLSBhL2NvbXBhdC9NYWtlZmlsZS5pbgorKysrIGIvY29tcGF0L01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE1LDkgKzE1LDU1IEBACisgQFNFVF9NQUtFQAorIAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zMyw0MCArNzksNzUgQEAgUE9TVF9VTklOU1RBTEwgPSA6CisgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBzdWJkaXIgPSBjb21wYXQKKy1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gZmxzbC5jIFwKKy0JZ2V0dGltZW9mZGF5LmMgc3RybGNhdC5jIHN0cmxjcHkuYworK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgc3RybGNhdC5jIGdldHRpbWVvZmRheS5jIFwKKysJc3RybGNweS5jIGZsc2wuYyAkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisgTFRMSUJSQVJJRVMgPSAkKG5vaW5zdF9MVExJQlJBUklFUykKKyBsaWJjb21wYXRfbGFfREVQRU5ERU5DSUVTID0gQExUTElCT0JKU0AKKyBhbV9saWJjb21wYXRfbGFfT0JKRUNUUyA9CisgbGliY29tcGF0X2xhX09CSkVDVFMgPSAkKGFtX2xpYmNvbXBhdF9sYV9PQkpFQ1RTKQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKyAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKysJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKKythbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CisrYW1fX3ZfQ0NfMSA9IAorIENDTEQgPSAkKENDKQorLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCistCSQoTERGTEFHUykgLW8gJEAKKytMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKKythbV9fdl9DQ0xEXzEgPSAKKyBTT1VSQ0VTID0gJChsaWJjb21wYXRfbGFfU09VUkNFUykKKyBESVNUX1NPVVJDRVMgPSAkKGxpYmNvbXBhdF9sYV9TT1VSQ0VTKQorLUVUQUdTID0gZXRhZ3MKKy1DVEFHUyA9IGN0YWdzCisrYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisrICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKysgICAgbnxub3xOTykgZmFsc2U7OyBcCisrICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisrICBlc2FjCisrYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKyBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorIEFDTE9DQUwgPSBAQUNMT0NBTEAKKyBBTExPQ0EgPSBAQUxMT0NBQAorIEFNVEFSID0gQEFNVEFSQAorK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorIEFSID0gQEFSQAorIEFTID0gQEFTQAorIEFVVE9DT05GID0gQEFVVE9DT05GQAorQEAgLTExNiw2ICsxOTcsNyBAQCBMTl9TID0gQExOX1NACisgTFRMSUJPQkpTID0gQExUTElCT0JKU0AKKyBNQUlOVCA9IEBNQUlOVEAKKyBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACisgTUtESVJfUCA9IEBNS0RJUl9QQAorIE5NID0gQE5NQAorIE5NRURJVCA9IEBOTUVESVRACitAQCAtMTI4LDYgKzIxMCw3IEBAIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACisgUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKKytQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKKyBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorIFBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorIFBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK0BAIC0xNDgsNiArMjMxLDcgQEAgYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKKyBhYnNfc3JjZGlyID0gQGFic19zcmNkaXJACisgYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACisgYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorQEAgLTE4Miw3ICsyNjYsNiBAQCBsaWJkaXIgPSBAbGliZGlyQAorIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyBsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKKy1sdF9FQ0hPID0gQGx0X0VDSE9ACisgbWFuZGlyID0gQG1hbmRpckAKKyBta2Rpcl9wID0gQG1rZGlyX3BACisgb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorQEAgLTE5NSw2ICsyNzgsNyBAQCBzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKyBzcmNkaXIgPSBAc3JjZGlyQAorIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKyB0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKKyB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJjb21wYXQubGEKK0BAIC0yMDksMTQgKzI5MywxNCBAQCAkKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorLQkJJiYgZXhpdCAwOyBcCisrCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisgCSAgICAgIGV4aXQgMTs7IFwKKyAJICBlc2FjOyBcCisgCWRvbmU7IFwKKy0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBjb21wYXQvTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgY29tcGF0L01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBjb21wYXQvTWFrZWZpbGUnOyBcCisrCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKysJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gY29tcGF0L01ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtMjM0LDE3ICszMTgsMjEgQEAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorIAorIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorIAktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKy0JQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorLQkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKy0JICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKy0JICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCistCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorLQlkb25lCistbGliY29tcGF0LmxhOiAkKGxpYmNvbXBhdF9sYV9PQkpFQ1RTKSAkKGxpYmNvbXBhdF9sYV9ERVBFTkRFTkNJRVMpIAorLQkkKExJTkspICAkKGxpYmNvbXBhdF9sYV9PQkpFQ1RTKSAkKGxpYmNvbXBhdF9sYV9MSUJBREQpICQoTElCUykKKysJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IFwKKysJbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKKysJICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAorKwkgICAgICBzb3J0IC11YDsgXAorKwl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAorKwkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKKysJICBybSAtZiAkJHtsb2NzfTsgXAorKwl9CisrCisrbGliY29tcGF0LmxhOiAkKGxpYmNvbXBhdF9sYV9PQkpFQ1RTKSAkKGxpYmNvbXBhdF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliY29tcGF0X2xhX0RFUEVOREVOQ0lFUykgCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgICQobGliY29tcGF0X2xhX09CSkVDVFMpICQobGliY29tcGF0X2xhX0xJQkFERCkgJChMSUJTKQorIAorIG1vc3RseWNsZWFuLWNvbXBpbGU6CisgCS1ybSAtZiAqLiQoT0JKRVhUKQorQEAgLTI1OCw3OCArMzQ2LDM3IEBAIGRpc3RjbGVhbi1jb21waWxlOgorIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvc3RybGNweS5QbG9AYW1fX3F1b3RlQAorIAorIC5jLm86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyAuYy5vYmo6CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorIAorIC5jLmxvOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyAJLXJtIC1mICoubG8KKyAKKyBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisrdGFncyBUQUdTOgorKworK2N0YWdzIENUQUdTOgorKworK2NzY29wZSBjc2NvcGVsaXN0OgorIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKy0JaGVyZT1gcHdkYDsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKy0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCistCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCistCWZpCistY3RhZ3M6IENUQUdTCistQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCistCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorLQorLUdUQUdTOgorLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAorLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCistCistZGlzdGNsZWFuLXRhZ3M6CistCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisgCisgZGlzdGRpcjogJChESVNURklMRVMpCisgCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKK0BAIC0zNDcsMTMgKzM5NCwxNyBAQCBkaXN0ZGlyOiAkKERJU1RGSUxFUykKKyAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisgCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKyAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisrCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKysJICAgIGZpOyBcCisgCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKy0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorIAkgICAgZmk7IFwKKy0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKyAJICBlbHNlIFwKKy0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisrCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKyAJICAgIHx8IGV4aXQgMTsgXAorIAkgIGZpOyBcCisgCWRvbmUKK0BAIC0zNzEsMTYgKzQyMiwyMiBAQCBpbnN0YWxsLWFtOiBhbGwtYW0KKyAKKyBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQorIGluc3RhbGwtc3RyaXA6CistCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCistCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCistCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCistCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICAgaW5zdGFsbDsgXAorKwllbHNlIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorKwlmaQorIG1vc3RseWNsZWFuLWdlbmVyaWM6CisgCisgY2xlYW4tZ2VuZXJpYzoKKyAKKyBkaXN0Y2xlYW4tZ2VuZXJpYzoKKyAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisrCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorIAorIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorQEAgLTM5Myw4ICs0NTAsNyBAQCBjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKyBkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorIAktcm0gLXJmICQoREVQRElSKQorIAktcm0gLWYgTWFrZWZpbGUKKy1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKy0JZGlzdGNsZWFuLXRhZ3MKKytkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljCisgCisgZHZpOiBkdmktYW0KKyAKK0BAIC00MDIsNiArNDU4LDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtYW0KKyAKKytodG1sLWFtOgorKworIGluZm86IGluZm8tYW0KKyAKKyBpbmZvLWFtOgorQEAgLTQxMCwxOCArNDY4LDI4IEBAIGluc3RhbGwtZGF0YS1hbToKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00NDYsMTggKzUxNCwxOSBAQCB1bmluc3RhbGwtYW06CisgCisgLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorIAorLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKy0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCistCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKy0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCistCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKy0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKy0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKy0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCistCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisrCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MtYW0gZGlzdGNsZWFuIFwKKysJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBcCisrCWR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKysJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKysJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisrCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKysJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKysJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisrCXRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorKworIAorICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCitkaWZmIC0tZ2l0IGEvY29uZmlnL2NvbXBpbGUgYi9jb25maWcvY29tcGlsZQoraW5kZXggMWIxZDIzMi4uNTMxMTM2YiAxMDA3NTUKKy0tLSBhL2NvbmZpZy9jb21waWxlCisrKysgYi9jb25maWcvY29tcGlsZQorQEAgLTEsOSArMSw5IEBACisgIyEgL2Jpbi9zaAorLSMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCisrIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgJy1jIC1vJy4KKyAKKy1zY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKKytzY3JpcHR2ZXJzaW9uPTIwMTItMTAtMTQuMTE7ICMgVVRDCisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorICMKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitAQCAtMTcsOCArMTcsNyBAQCBzY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKKyAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgIworICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCitAQCAtMjksMjEgKzI4LDIyNCBAQCBzY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKKyAjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyAjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorIAorK25sPScKKysnCisrCisrIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKysjIHRoZXJlIHRvIHByZXZlbnQgdG9vbHMgZnJvbSBjb21wbGFpbmluZyBhYm91dCB3aGl0ZXNwYWNlIHVzYWdlLgorK0lGUz0iICIiCSRubCIKKysKKytmaWxlX2NvbnY9CisrCisrIyBmdW5jX2ZpbGVfY29udiBidWlsZF9maWxlIGxhenkKKysjIENvbnZlcnQgYSAkYnVpbGQgZmlsZSB0byAkaG9zdCBmb3JtIGFuZCBzdG9yZSBpdCBpbiAkZmlsZQorKyMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luZG93cyBob3N0cy4gSWYgdGhlIGRldGVybWluZWQgY29udmVyc2lvbgorKyMgdHlwZSBpcyBsaXN0ZWQgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gd2lsbAorKyMgdGFrZSBwbGFjZS4KKytmdW5jX2ZpbGVfY29udiAoKQorK3sKKysgIGZpbGU9JDEKKysgIGNhc2UgJGZpbGUgaW4KKysgICAgLyB8IC9bIS9dKikgIyBhYnNvbHV0ZSBmaWxlLCBhbmQgbm90IGEgVU5DIGZpbGUKKysgICAgICBpZiB0ZXN0IC16ICIkZmlsZV9jb252IjsgdGhlbgorKwkjIGxhemlseSBkZXRlcm1pbmUgaG93IHRvIGNvbnZlcnQgYWJzIGZpbGVzCisrCWNhc2UgYHVuYW1lIC1zYCBpbgorKwkgIE1JTkdXKikKKysJICAgIGZpbGVfY29udj1taW5ndworKwkgICAgOzsKKysJICBDWUdXSU4qKQorKwkgICAgZmlsZV9jb252PWN5Z3dpbgorKwkgICAgOzsKKysJICAqKQorKwkgICAgZmlsZV9jb252PXdpbmUKKysJICAgIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGNhc2UgJGZpbGVfY29udi8sJDIsIGluCisrCSosJGZpbGVfY29udiwqKQorKwkgIDs7CisrCW1pbmd3LyopCisrCSAgZmlsZT1gY21kIC8vQyBlY2hvICIkZmlsZSAiIHwgc2VkIC1lICdzLyJcKC4qXCkgIiAqJC9cMS8nYAorKwkgIDs7CisrCWN5Z3dpbi8qKQorKwkgIGZpbGU9YGN5Z3BhdGggLW0gIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisrCSAgOzsKKysJd2luZS8qKQorKwkgIGZpbGU9YHdpbmVwYXRoIC13ICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorKwkgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICBlc2FjCisrfQorKworKyMgZnVuY19jbF9kYXNoTCBsaW5rZGlyCisrIyBNYWtlIGNsIGxvb2sgZm9yIGxpYnJhcmllcyBpbiBMSU5LRElSCisrZnVuY19jbF9kYXNoTCAoKQorK3sKKysgIGZ1bmNfZmlsZV9jb252ICIkMSIKKysgIGlmIHRlc3QgLXogIiRsaWJfcGF0aCI7IHRoZW4KKysgICAgbGliX3BhdGg9JGZpbGUKKysgIGVsc2UKKysgICAgbGliX3BhdGg9IiRsaWJfcGF0aDskZmlsZSIKKysgIGZpCisrICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzIC1MSUJQQVRIOiRmaWxlIgorK30KKysKKysjIGZ1bmNfY2xfZGFzaGwgbGlicmFyeQorKyMgRG8gYSBsaWJyYXJ5IHNlYXJjaC1wYXRoIGxvb2t1cCBmb3IgY2wKKytmdW5jX2NsX2Rhc2hsICgpCisreworKyAgbGliPSQxCisrICBmb3VuZD1ubworKyAgc2F2ZV9JRlM9JElGUworKyAgSUZTPSc7JworKyAgZm9yIGRpciBpbiAkbGliX3BhdGggJExJQgorKyAgZG8KKysgICAgSUZTPSRzYXZlX0lGUworKyAgICBpZiAkc2hhcmVkICYmIHRlc3QgLWYgIiRkaXIvJGxpYi5kbGwubGliIjsgdGhlbgorKyAgICAgIGZvdW5kPXllcworKyAgICAgIGxpYj0kZGlyLyRsaWIuZGxsLmxpYgorKyAgICAgIGJyZWFrCisrICAgIGZpCisrICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYi5saWIiOyB0aGVuCisrICAgICAgZm91bmQ9eWVzCisrICAgICAgbGliPSRkaXIvJGxpYi5saWIKKysgICAgICBicmVhaworKyAgICBmaQorKyAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRsaWIuYSI7IHRoZW4KKysgICAgICBmb3VuZD15ZXMKKysgICAgICBsaWI9JGRpci9saWIkbGliLmEKKysgICAgICBicmVhaworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSRzYXZlX0lGUworKworKyAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKysgICAgbGliPSRsaWIubGliCisrICBmaQorK30KKysKKysjIGZ1bmNfY2xfd3JhcHBlciBjbCBhcmcuLi4KKysjIEFkanVzdCBjb21waWxlIGNvbW1hbmQgdG8gc3VpdCBjbAorK2Z1bmNfY2xfd3JhcHBlciAoKQorK3sKKysgICMgQXNzdW1lIGEgY2FwYWJsZSBzaGVsbAorKyAgbGliX3BhdGg9CisrICBzaGFyZWQ9OgorKyAgbGlua2VyX29wdHM9CisrICBmb3IgYXJnCisrICBkbworKyAgICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorKyAgICAgIGVhdD0KKysgICAgZWxzZQorKyAgICAgIGNhc2UgJDEgaW4KKysJLW8pCisrCSAgIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisrCSAgZWF0PTEKKysJICBjYXNlICQyIGluCisrCSAgICAqLm8gfCAqLltvT11bYkJdW2pKXSkKKysJICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgorKwkgICAgICBzZXQgeCAiJEAiIC1GbyIkZmlsZSIKKysJICAgICAgc2hpZnQKKysJICAgICAgOzsKKysJICAgICopCisrCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKKysJICAgICAgc2V0IHggIiRAIiAtRmUiJGZpbGUiCisrCSAgICAgIHNoaWZ0CisrCSAgICAgIDs7CisrCSAgZXNhYworKwkgIDs7CisrCS1JKQorKwkgIGVhdD0xCisrCSAgZnVuY19maWxlX2NvbnYgIiQyIiBtaW5ndworKwkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCisrCSAgc2hpZnQKKysJICA7OworKwktSSopCisrCSAgZnVuY19maWxlX2NvbnYgIiR7MSMtSX0iIG1pbmd3CisrCSAgc2V0IHggIiRAIiAtSSIkZmlsZSIKKysJICBzaGlmdAorKwkgIDs7CisrCS1sKQorKwkgIGVhdD0xCisrCSAgZnVuY19jbF9kYXNobCAiJDIiCisrCSAgc2V0IHggIiRAIiAiJGxpYiIKKysJICBzaGlmdAorKwkgIDs7CisrCS1sKikKKysJICBmdW5jX2NsX2Rhc2hsICIkezEjLWx9IgorKwkgIHNldCB4ICIkQCIgIiRsaWIiCisrCSAgc2hpZnQKKysJICA7OworKwktTCkKKysJICBlYXQ9MQorKwkgIGZ1bmNfY2xfZGFzaEwgIiQyIgorKwkgIDs7CisrCS1MKikKKysJICBmdW5jX2NsX2Rhc2hMICIkezEjLUx9IgorKwkgIDs7CisrCS1zdGF0aWMpCisrCSAgc2hhcmVkPWZhbHNlCisrCSAgOzsKKysJLVdsLCopCisrCSAgYXJnPSR7MSMtV2wsfQorKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworKwkgIGZvciBmbGFnIGluICRhcmc7IGRvCisrCSAgICBJRlM9IiRzYXZlX2lmcyIKKysJICAgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJGZsYWciCisrCSAgZG9uZQorKwkgIElGUz0iJHNhdmVfaWZzIgorKwkgIDs7CisrCS1YbGlua2VyKQorKwkgIGVhdD0xCisrCSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkMiIKKysJICA7OworKwktKikKKysJICBzZXQgeCAiJEAiICIkMSIKKysJICBzaGlmdAorKwkgIDs7CisrCSouY2MgfCAqLkNDIHwgKi5jeHggfCAqLkNYWCB8ICouW2NDXSsrKQorKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIKKysJICBzZXQgeCAiJEAiIC1UcCIkZmlsZSIKKysJICBzaGlmdAorKwkgIDs7CisrCSouYyB8ICouY3BwIHwgKi5DUFAgfCAqLmxpYiB8ICouTElCIHwgKi5MaWIgfCAqLk9CSiB8ICoub2JqIHwgKi5bb09dKQorKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIgbWluZ3cKKysJICBzZXQgeCAiJEAiICIkZmlsZSIKKysJICBzaGlmdAorKwkgIDs7CisrCSopCisrCSAgc2V0IHggIiRAIiAiJDEiCisrCSAgc2hpZnQKKysJICA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysgICAgc2hpZnQKKysgIGRvbmUKKysgIGlmIHRlc3QgLW4gIiRsaW5rZXJfb3B0cyI7IHRoZW4KKysgICAgbGlua2VyX29wdHM9Ii1saW5rJGxpbmtlcl9vcHRzIgorKyAgZmkKKysgIGV4ZWMgIiRAIiAkbGlua2VyX29wdHMKKysgIGV4aXQgMQorK30KKysKKytlYXQ9CisrCisgY2FzZSAkMSBpbgorICAgJycpCistICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisrICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgIGV4aXQgMTsKKyAgICAgIDs7CisgICAtaCB8IC0taCopCisgICAgIGNhdCA8PFxFT0YKKyBVc2FnZTogY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorIAorLVdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorLVJlbW92ZSBgLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZworK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgorK1JlbW92ZSAnLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZworIGFyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorIAorIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEgd2hvbGUgcGFja2FnZSB0aGlzIGlzIG5vdCB0aGUKKy1yaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSBgSU5TVEFMTCcuCisrcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgJ0lOU1RBTEwnLgorIAorIFJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCisgRU9GCitAQCAtNTMsMTEgKzI1NSwxMyBAQCBFT0YKKyAgICAgZWNobyAiY29tcGlsZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAgZXhpdCAkPworICAgICA7OworKyAgY2wgfCAqWy9cXF1jbCB8IGNsLmV4ZSB8ICpbL1xcXWNsLmV4ZSApCisrICAgIGZ1bmNfY2xfd3JhcHBlciAiJEAiICAgICAgIyBEb2Vzbid0IHJldHVybi4uLgorKyAgICA7OworIGVzYWMKKyAKKyBvZmlsZT0KKyBjZmlsZT0KKy1lYXQ9CisgCisgZm9yIGFyZworIGRvCitAQCAtNjYsOCArMjcwLDggQEAgZG8KKyAgIGVsc2UKKyAgICAgY2FzZSAkMSBpbgorICAgICAgIC1vKQorLQkjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgYGNvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKy0JIyBTbyB3ZSBzdHJpcCBgLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisrCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorKwkjIFNvIHdlIHN0cmlwICctbyBhcmcnIG9ubHkgaWYgYXJnIGlzIGFuIG9iamVjdC4KKyAJZWF0PTEKKyAJY2FzZSAkMiBpbgorIAkgICoubyB8ICoub2JqKQorQEAgLTk0LDIyICsyOTgsMjIgQEAgZG8KKyBkb25lCisgCisgaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCistICAjIElmIG5vIGAtbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCisrICAjIElmIG5vICctbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCisgICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCistICAjIGAuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCisrICAjICcuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCisgICAjIG9rLgorICAgZXhlYyAiJEAiCisgZmkKKyAKKyAjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorLWNvZmlsZT1gZWNobyAiJGNmaWxlIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuYyQvLm8vJ2AKKytjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgJ3N8Xi4qW1xcL118fDsgc3xeW2EtekEtWl06fHw7IHMvXC5jJC8uby8nYAorIAorICMgQ3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeS4KKy0jIE5vdGU6IHVzZSBgWy8uLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKysjIE5vdGU6IHVzZSAnWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyAjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisgIyBvYmplY3QgZmlsZSBuYW1lLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWF0dGVycyB3aXRoIGEgcGFyYWxsZWwgYnVpbGQuCistbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy8uLV18X3xnJ2AuZAorK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKKyB3aGlsZSB0cnVlOyBkbworICAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgYnJlYWsKK0BAIC0xMjQsOSArMzI4LDkgQEAgdHJhcCAicm1kaXIgJyRsb2NrZGlyJzsgZXhpdCAxIiAxIDIgMTUKKyByZXQ9JD8KKyAKKyBpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorLSAgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCisrICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgorIGVsaWYgdGVzdCAtZiAiJHtjb2ZpbGV9YmoiOyB0aGVuCistICBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCisrICB0ZXN0ICIke2NvZmlsZX1iaiIgPSAiJG9maWxlIiB8fCBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCisgZmkKKyAKKyBybWRpciAiJGxvY2tkaXIiCitAQCAtMTM4LDUgKzM0Miw2IEBAIGV4aXQgJHJldAorICMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorICMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorICMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCistIyB0aW1lLXN0YW1wLWVuZDogIiQiCisrIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKysjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyAjIEVuZDoKK2RpZmYgLS1naXQgYS9jb25maWcvY29uZmlnLmd1ZXNzIGIvY29uZmlnL2NvbmZpZy5ndWVzcworaW5kZXggZjMyMDc5YS4uYjc5MjUyZCAxMDA3NTUKKy0tLSBhL2NvbmZpZy9jb25maWcuZ3Vlc3MKKysrKyBiL2NvbmZpZy9jb25maWcuZ3Vlc3MKK0BAIC0xLDE0ICsxLDEyIEBACisgIyEgL2Jpbi9zaAorICMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKy0jICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4CistIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLXRpbWVzdGFtcD0nMjAwOC0wMS0yMycKKyt0aW1lc3RhbXA9JzIwMTMtMDYtMTAnCisgCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAjCisgIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitAQCAtMTcsMjYgKzE1LDIyIEBAIHRpbWVzdGFtcD0nMjAwOC0wMS0yMycKKyAjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCisgIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCistIyAwMjExMC0xMzAxLCBVU0EuCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICMKKyAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyAjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorICMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKy0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy0KKy0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lciA8cGVyQGJvdGhuZXIuY29tPi4KKy0jIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorLSMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKysjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKysjCisrIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCisgIworLSMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bworLSMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCistIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKysjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisgIworLSMgVGhlIHBsYW4gaXMgdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgYnkgY29uZmlndXJlIHNjcmlwdHMgaWYgeW91CistIyBkb24ndCBzcGVjaWZ5IGFuIGV4cGxpY2l0IGJ1aWxkIHN5c3RlbSB0eXBlLgorKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB3aXRoIGEgQ2hhbmdlTG9nIGVudHJ5IHRvIGNvbmZpZy1wYXRjaGVzQGdudS5vcmcuCisrCisgCisgbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisgCitAQCAtNTYsOCArNTAsNyBAQCB2ZXJzaW9uPSJcCisgR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKKyAKKyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCistQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorLTIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKK0BAIC0xMzksMTIgKzEzMiwzMyBAQCBVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KKyBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorIFVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorIAorK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KKytMaW51eHxHTlV8R05VLyopCisrCSMgSWYgdGhlIHN5c3RlbSBsYWNrcyBhIGNvbXBpbGVyLCB0aGVuIGp1c3QgcGljayBnbGliYy4KKysJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorKwlMSUJDPWdudQorKworKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisrCWNhdCA8PC1FT0YgPiAkZHVtbXkuYworKwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKysJTElCQz11Y2xpYmMKKysJI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCisrCUxJQkM9ZGlldGxpYmMKKysJI2Vsc2UKKysJTElCQz1nbnUKKysJI2VuZGlmCisrCUVPRgorKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorKwk7OworK2VzYWMKKysKKyAjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisgCisgY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICAqOk5ldEJTRDoqOiopCisgCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCistCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKysJIyBtb3JlIG9mIHRoZSB0dXBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisgCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisgCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorIAkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCitAQCAtMTcwLDcgKzE4NCw3IEBAIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorIAkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorIAkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKy0JCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCisrCQkJfCBncmVwIC1xIF9fRUxGX18KKyAJCXRoZW4KKyAJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCisgCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CitAQCAtMTgwLDcgKzE5NCw3IEBAIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAJCWZpCisgCQk7OworIAkgICAgKikKKy0JICAgICAgICBvcz1uZXRic2QKKysJCW9zPW5ldGJzZAorIAkJOzsKKyAJZXNhYworIAkjIFRoZSBPUyByZWxlYXNlCitAQCAtMjAxLDYgKzIxNSwxMCBAQCBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKyAJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisgCWV4aXQgOzsKKysgICAgKjpCaXRyaWc6KjoqKQorKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvQml0cmlnLi8vJ2AKKysJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1iaXRyaWcke1VOQU1FX1JFTEVBU0V9CisrCWV4aXQgOzsKKyAgICAgKjpPcGVuQlNEOio6KikKKyAJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorIAllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CitAQCAtMjIzLDcgKzI0MSw3IEBAIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisgCQk7OworIAkqNS4qKQorLQkgICAgICAgIFVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisrCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorIAkJOzsKKyAJZXNhYworIAkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorQEAgLTI2OSw3ICsyODcsMTAgQEAgY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorIAkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKyAJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorLQlleGl0IDs7CisrCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KKysJZXhpdGNvZGU9JD8KKysJdHJhcCAnJyAwCisrCWV4aXQgJGV4aXRjb2RlIDs7CisgICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCisgCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKyAJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCitAQCAtMjk1LDEyICszMTYsMTIgQEAgY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorIAllY2hvIHMzOTAtaWJtLXp2bW9lCisgCWV4aXQgOzsKKyAgICAgKjpPUzQwMDoqOiopCistICAgICAgICBlY2hvIHBvd2VycGMtaWJtLW9zNDAwCisrCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKyAJZXhpdCA7OworICAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisgCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKyAJZXhpdCA7OworLSAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKysgICAgYXJtKjpyaXNjb3M6KjoqfGFybSo6UklTQ09TOio6KikKKyAJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKyAJZXhpdCA7OworICAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorQEAgLTMyNCwxNCArMzQ1LDMzIEBAIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisgCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisgCWVzYWMgOzsKKysgICAgczM5MHg6U3VuT1M6KjoqKQorKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisrCWV4aXQgOzsKKyAgICAgc3VuNEg6U3VuT1M6NS4qOiopCisgCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisgCWV4aXQgOzsKKyAgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKKyAJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKyAJZXhpdCA7OworKyAgICBpODZwYzpBdXJvcmFVWDo1Lio6KiB8IGk4NnhlbjpBdXJvcmFVWDo1Lio6KikKKysJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorKwlleGl0IDs7CisgICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQorLQllY2hvIGkzODYtcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKysJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorKwlTVU5fQVJDSD0iaTM4NiIKKysJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisrCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKysJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKysJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisrCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKysJICAgIHRoZW4KKysJCVNVTl9BUkNIPSJ4ODZfNjQiCisrCSAgICBmaQorKwlmaQorKwllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisgCWV4aXQgOzsKKyAgICAgc3VuNCo6U3VuT1M6Nio6KikKKyAJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKK0BAIC0zNzUsMjMgKzQxNSwyMyBAQCBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorLSAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisrCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorIAlleGl0IDs7CisgICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKyAJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CistICAgICAgICBleGl0IDs7CisrCWV4aXQgOzsKKyAgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCistICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKysJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgCWV4aXQgOzsKKyAgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorLSAgICAgICAgZWNobyBtNjhrLW1pbGFuLW1pbnQke1VOQU1FX1JFTEVBU0V9CistICAgICAgICBleGl0IDs7CisrCWVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorKwlleGl0IDs7CisgICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKKy0gICAgICAgIGVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorLSAgICAgICAgZXhpdCA7OworKwllY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKysJZXhpdCA7OworICAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKy0gICAgICAgIGVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CistICAgICAgICBleGl0IDs7CisrCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisrCWV4aXQgOzsKKyAgICAgbTY4azptYWNodGVuOio6KikKKyAJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisgCWV4aXQgOzsKK0BAIC00NjEsOCArNTAxLDggQEAgRU9GCisgCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworIAlleGl0IDs7CisgICAgIEFWaWlPTjpkZ3V4Oio6KikKKy0gICAgICAgICMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCistICAgICAgICBVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorKwkjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorIAlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisgCXRoZW4KKyAJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorQEAgLTQ3NSw3ICs1MTUsNyBAQCBFT0YKKyAJZWxzZQorIAkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisgCWZpCistIAlleGl0IDs7CisrCWV4aXQgOzsKKyAgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKyAJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKyAJZXhpdCA7OworQEAgLTUzMiw3ICs1NzIsNyBAQCBFT0YKKyAJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKyAJZmkKKyAJZXhpdCA7OworLSAgICAqOkFJWDoqOls0NTZdKQorKyAgICAqOkFJWDoqOls0NTY3XSkKKyAJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisgCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorIAkJSUJNX0FSQ0g9cnM2MDAwCitAQCAtNTc1LDUyICs2MTUsNTIgQEAgRU9GCisgCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKyAJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisgCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCistICAgICAgICAgICAgICAgICAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorLSAgICAgICAgICAgICAgICAgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKy0gICAgICAgICAgICAgICAgICAgICAgNTI4KSBIUF9BUkNIPSJocHBhMS4xIiA7OyAjIENQVV9QQV9SSVNDMV8xCistICAgICAgICAgICAgICAgICAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworLSAgICAgICAgICAgICAgICAgICAgICAgICAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorKwkJICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorKwkJICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisrCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKysJCSAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorKwkJCWNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworKwkJCSAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworIAkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorLSAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMgOzsKKy0gICAgICAgICAgICAgICAgICAgIGVzYWMKKysJCQllc2FjIDs7CisrCQkgICAgZXNhYworIAkJZmkKKyAJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorIAkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKy0JCSAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKysJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKyAKKy0gICAgICAgICAgICAgICNkZWZpbmUgX0hQVVhfU09VUkNFCistICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CistICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorKwkJI2luY2x1ZGUgPHN0ZGxpYi5oPgorKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorLSAgICAgICAgICAgICAgaW50IG1haW4gKCkKKy0gICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKy0gICAgICAgICAgICAgICAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CistICAgICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgICAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworKwkJaW50IG1haW4gKCkKKysJCXsKKysJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKysJCSAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CisrCQkjZW5kaWYKKysJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworIAorLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3B1KQorLSAgICAgICAgICAgICAgCXsKKy0gICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKy0gICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKy0gICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMl8wOgorLSAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorLSAgICAgICAgICAgICAgCSAgICBzd2l0Y2ggKGJpdHMpCistICAgICAgICAgICAgICAJCXsKKy0gICAgICAgICAgICAgIAkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOworLSAgICAgICAgICAgICAgCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CistICAgICAgICAgICAgICAJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworLSAgICAgICAgICAgICAgCQl9IGJyZWFrOworLSAgICAgICAgICAgICAgI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKy0gICAgICAgICAgICAgIAkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CistICAgICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgIAlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKy0gICAgICAgICAgICAgIAl9CistICAgICAgICAgICAgICAgICAgZXhpdCAoMCk7CistICAgICAgICAgICAgICB9CisrCQkgICAgc3dpdGNoIChjcHUpCisrCQkJeworKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOworKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisrCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisrCQkJICAgIHN3aXRjaCAoYml0cykKKysJCQkJeworKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisrCQkJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKKysJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisrCQkJCX0gYnJlYWs7CisrCQkjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLworKwkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKysJCSNlbmRpZgorKwkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworKwkJCX0KKysJCSAgICBleGl0ICgwKTsKKysJCX0KKyBFT0YKKyAJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorIAkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKK0BAIC02NDAsNyArNjgwLDcgQEAgRU9GCisgCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKyAKKyAJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKy0JCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorKwkJZ3JlcCAtcSBfX0xQNjRfXworIAkgICAgdGhlbgorIAkJSFBfQVJDSD0iaHBwYTIuMHciCisgCSAgICBlbHNlCitAQCAtNzExLDIyICs3NTEsMjIgQEAgRU9GCisgCWV4aXQgOzsKKyAgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKKyAJZWNobyBjMS1jb252ZXgtYnNkCistICAgICAgICBleGl0IDs7CisrCWV4aXQgOzsKKyAgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKyAJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisgCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorIAllbHNlIGVjaG8gYzItY29udmV4LWJzZAorIAlmaQorLSAgICAgICAgZXhpdCA7OworKwlleGl0IDs7CisgICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKyAJZWNobyBjMzQtY29udmV4LWJzZAorLSAgICAgICAgZXhpdCA7OworKwlleGl0IDs7CisgICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKKyAJZWNobyBjMzgtY29udmV4LWJzZAorLSAgICAgICAgZXhpdCA7OworKwlleGl0IDs7CisgICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCisgCWVjaG8gYzQtY29udmV4LWJzZAorLSAgICAgICAgZXhpdCA7OworKwlleGl0IDs7CisgICAgIENSQVkqWS1NUDoqOio6KikKKyAJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKyAJZXhpdCA7OworQEAgLTc1MCwxNCArNzkwLDE0IEBAIEVPRgorIAlleGl0IDs7CisgICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorIAlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorLSAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorLSAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKy0gICAgICAgIGVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCistICAgICAgICBleGl0IDs7CisrCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKysJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKysJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKysJZXhpdCA7OworICAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCistICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCistICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorLSAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisrCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisrCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKyAJZXhpdCA7OworICAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKyAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CitAQCAtNzY5LDM0ICs4MDksMzkgQEAgRU9GCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisgCWV4aXQgOzsKKyAgICAgKjpGcmVlQlNEOio6KikKKy0JY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCistCSAgICBwYzk4KQorLQkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKysJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKysJY2FzZSAke1VOQU1FX1BST0NFU1NPUn0gaW4KKyAJICAgIGFtZDY0KQorIAkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworIAkgICAgKikKKy0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisrCQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisgCWVzYWMKKyAJZXhpdCA7OworICAgICBpKjpDWUdXSU4qOiopCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKyAJZXhpdCA7OworKyAgICAqOk1JTkdXNjQqOiopCisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzY0CisrCWV4aXQgOzsKKyAgICAgKjpNSU5HVyo6KikKKyAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKyAJZXhpdCA7OworKyAgICBpKjpNU1lTKjoqKQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cworKwlleGl0IDs7CisgICAgIGkqOndpbmRvd3MzMio6KikKKy0gICAgCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCistICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorKwkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorKwllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorIAlleGl0IDs7CisgICAgIGkqOlBXKjoqKQorIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorIAlleGl0IDs7CistICAgICo6SW50ZXJpeCo6WzM0NTZdKikKKy0gICAgCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorKyAgICAqOkludGVyaXgqOiopCisrCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorIAkgICAgeDg2KQorIAkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisgCQlleGl0IDs7CistCSAgICBFTTY0VCB8IGF1dGhlbnRpY2FtZCkKKysJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorIAkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorIAkJZXhpdCA7OworIAkgICAgSUE2NCkKK0BAIC04MDYsNiArODUxLDkgQEAgRU9GCisgICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKyAJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKyAJZXhpdCA7OworKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKysJZWNobyB4ODZfNjQtcGMtbWtzCisrCWV4aXQgOzsKKyAgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisgCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKyAJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKK0BAIC04MjYsMjEwICs4NzQsMTU3IEBAIEVPRgorIAlleGl0IDs7CisgICAgICo6R05VOio6KikKKyAJIyB0aGUgR05VIHN5c3RlbQorLQllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKysJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLSR7TElCQ31gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorIAlleGl0IDs7CisgICAgICo6R05VLyo6KjoqKQorIAkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaSo4NjpNaW5peDoqOiopCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorIAlleGl0IDs7CisrICAgIGFhcmNoNjQ6TGludXg6KjoqKQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisrCWV4aXQgOzsKKysgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCisrCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisrCWV4aXQgOzsKKysgICAgYWxwaGE6TGludXg6KjoqKQorKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisrCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisrCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKysJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworKwllc2FjCisrCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJnbnVsaWJjMSIgOyBmaQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisrCWV4aXQgOzsKKysgICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorKwlleGl0IDs7CisgICAgIGFybSo6TGludXg6KjoqKQorIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisgCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKyAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKyAJdGhlbgorLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWVsc2UKKy0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmkKKysJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisrCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorKwkgICAgdGhlbgorKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmkKKysJICAgIGVsc2UKKysJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpaGYKKysJICAgIGZpCisgCWZpCisgCWV4aXQgOzsKKyAgICAgYXZyMzIqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBjcmlzOkxpbnV4Oio6KikKKy0JZWNobyBjcmlzLWF4aXMtbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBjcmlzdjMyOkxpbnV4Oio6KikKKy0JZWNobyBjcmlzdjMyLWF4aXMtbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBmcnY6TGludXg6KjoqKQorLSAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorKwlleGl0IDs7CisrICAgIGhleGFnb246TGludXg6KjoqKQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisrCWV4aXQgOzsKKysgICAgaSo4NjpMaW51eDoqOiopCisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaWE2NDpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgbTMycio6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIG02OCo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CistICAgIG1pcHM6TGludXg6KjoqKQorKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisgCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKyAJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyAJI3VuZGVmIENQVQorLQkjdW5kZWYgbWlwcworLQkjdW5kZWYgbWlwc2VsCisrCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisrCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKyAJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKy0JQ1BVPW1pcHNlbAorKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCisgCSNlbHNlCisgCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCistCUNQVT1taXBzCisrCUNQVT0ke1VOQU1FX01BQ0hJTkV9CisgCSNlbHNlCisgCUNQVT0KKyAJI2VuZGlmCisgCSNlbmRpZgorIEVPRgorLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCistCSAgICAvXkNQVS97CistCQlzOiA6OmcKKy0JCXAKKy0JICAgIH0nYCIKKy0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKysJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KKyAJOzsKKy0gICAgbWlwczY0OkxpbnV4Oio6KikKKy0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworLQkjdW5kZWYgQ1BVCistCSN1bmRlZiBtaXBzNjQKKy0JI3VuZGVmIG1pcHM2NGVsCistCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCistCUNQVT1taXBzNjRlbAorLQkjZWxzZQorLQkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorLQlDUFU9bWlwczY0CistCSNlbHNlCistCUNQVT0KKy0JI2VuZGlmCistCSNlbmRpZgorLUVPRgorLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCistCSAgICAvXkNQVS97CistCQlzOiA6OmcKKy0JCXAKKy0JICAgIH0nYCIKKy0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKy0JOzsKKy0gICAgb3IzMjpMaW51eDoqOiopCistCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQorKyAgICBvcjFrOkxpbnV4Oio6KikKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CistICAgIHBwYzpMaW51eDoqOiopCistCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorKyAgICBvcjMyOkxpbnV4Oio6KikKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CistICAgIHBwYzY0OkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKysgICAgcGFkcmU6TGludXg6KjoqKQorKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CistICAgIGFscGhhOkxpbnV4Oio6KikKKy0JY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKy0JICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworLQkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworLQkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKy0JICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CistCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKy0JICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKy0JICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKy0gICAgICAgIGVzYWMKKy0Jb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCBsZC5zby4xID4vZGV2L251bGwKKy0JaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisgCSMgTG9vayBmb3IgQ1BVIGxldmVsCisgCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCistCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CistCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CistCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisrCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKysJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisgCWVzYWMKKyAJZXhpdCA7OworLSAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorLQllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorKyAgICBwcGM2NDpMaW51eDoqOiopCisrCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQorKwlleGl0IDs7CisrICAgIHBwYzpMaW51eDoqOiopCisrCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKysJZXhpdCA7OworKyAgICBwcGM2NGxlOkxpbnV4Oio6KikKKysJZWNobyBwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LSR7TElCQ30KKysJZXhpdCA7OworKyAgICBwcGNsZTpMaW51eDoqOiopCisrCWVjaG8gcG93ZXJwY2xlLXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHNoNjQqOkxpbnV4Oio6KikKKy0gICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgc2gqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKysJZXhpdCA7OworKyAgICB0aWxlKjpMaW51eDoqOiopCisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB2YXg6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB4ODZfNjQ6TGludXg6KjoqKQorLQllY2hvIHg4Nl82NC11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgeHRlbnNhKjpMaW51eDoqOiopCistICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CistICAgIGkqODY6TGludXg6KjoqKQorLQkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbworLQkjIGZpcnN0IHNlZSBpZiBpdCB3aWxsIHRlbGwgdXMuIGNkIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmV2ZW50CistCSMgcHJvYmxlbXMgd2l0aCBvdGhlciBwcm9ncmFtcyBvciBkaXJlY3RvcmllcyBjYWxsZWQgYGxkJyBpbiB0aGUgcGF0aC4KKy0JIyBTZXQgTENfQUxMPUMgdG8gZW5zdXJlIGxkIG91dHB1dHMgbWVzc2FnZXMgaW4gRW5nbGlzaC4KKy0JbGRfc3VwcG9ydGVkX3RhcmdldHM9YGNkIC87IExDX0FMTD1DIGxkIC0taGVscCAyPiYxIFwKKy0JCQkgfCBzZWQgLW5lICcvc3VwcG9ydGVkIHRhcmdldHM6LyFkCistCQkJCSAgICBzL1sgCV1bIAldKi8gL2cKKy0JCQkJICAgIHMvLipzdXBwb3J0ZWQgdGFyZ2V0czogKi8vCistCQkJCSAgICBzLyAuKi8vCistCQkJCSAgICBwJ2AKKy0gICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfdGFyZ2V0cyIgaW4KKy0JICBlbGYzMi1pMzg2KQorLQkJVEVOVEFUSVZFPSIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudSIKKy0JCTs7CistCSAgYS5vdXQtaTM4Ni1saW51eCkKKy0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKKy0JCWV4aXQgOzsKKy0JICBjb2ZmLWkzODYpCistCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWNvZmYiCistCQlleGl0IDs7CistCSAgIiIpCistCQkjIEVpdGhlciBhIHByZS1CRkQgYS5vdXQgbGlua2VyIChsaW51eC1nbnVvbGRsZCkgb3IKKy0JCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgorLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIKKy0JCWV4aXQgOzsKKy0JZXNhYworLQkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgorLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCistCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCistCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorLQkjaWZkZWYgX19FTEZfXworLQkjIGlmZGVmIF9fR0xJQkNfXworLQkjICBpZiBfX0dMSUJDX18gPj0gMgorLQlMSUJDPWdudQorLQkjICBlbHNlCistCUxJQkM9Z251bGliYzEKKy0JIyAgZW5kaWYKKy0JIyBlbHNlCistCUxJQkM9Z251bGliYzEKKy0JIyBlbmRpZgorLQkjZWxzZQorLQkjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSB8fCBkZWZpbmVkKF9fUEdJKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCistCUxJQkM9Z251CistCSNlbHNlCistCUxJQkM9Z251YW91dAorLQkjZW5kaWYKKy0JI2VuZGlmCistCSNpZmRlZiBfX2RpZXRsaWJjX18KKy0JTElCQz1kaWV0bGliYworLQkjZW5kaWYKKy1FT0YKKy0JZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJworLQkgICAgL15MSUJDL3sKKy0JCXM6IDo6ZworLQkJcAorLQkgICAgfSdgIgorLQl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7CistCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCistCQlleGl0CistCX0KKy0JdGVzdCB4IiR7VEVOVEFUSVZFfSIgIT0geCAmJiB7IGVjaG8gIiR7VEVOVEFUSVZFfSI7IGV4aXQ7IH0KKy0JOzsKKyAgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKyAJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KKyAJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorQEAgLTEwMzcsMTEgKzEwMzIsMTEgQEAgRU9GCisgCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisgCWV4aXQgOzsKKyAgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKy0gICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKy0gICAgICAgICMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKy0gICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKysJIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorKwkjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisrCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKyAJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorLSAgICAgICAgIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisrCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorIAlleGl0IDs7CisgICAgIGkqODY6T1MvMjoqOiopCitAQCAtMTA1OCw3ICsxMDUzLDcgQEAgRU9GCisgICAgIGkqODY6c3lsbGFibGU6KjoqKQorIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKyAJZXhpdCA7OworLSAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuMCo6KikKKysgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisgCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKyAJZXhpdCA7OworICAgICBpKjg2OipET1M6KjoqKQorQEAgLTEwNzMsNyArMTA2OCw3IEBAIEVPRgorIAlmaQorIAlleGl0IDs7CisgICAgIGkqODY6Kjo1Ols2NzhdKikKKy0gICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKyAJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKyAJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworIAkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CitAQCAtMTEwMSwxMCArMTA5NiwxMyBAQCBFT0YKKyAJZXhpdCA7OworICAgICBwYzoqOio6KikKKyAJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CistICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorLSAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTM4Ni4KKy0JZWNobyBpMzg2LXBjLW1zZG9zZGpncHAKKy0gICAgICAgIGV4aXQgOzsKKysJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKysJIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKysJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKysJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisrCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisrCWV4aXQgOzsKKyAgICAgSW50ZWw6TWFjaDozKjoqKQorIAllY2hvIGkzODYtcGMtbWFjaDMKKyAJZXhpdCA7OworQEAgLTExMzksOCArMTEzNywxOCBAQCBFT0YKKyAJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisgCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCistICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKy0gICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisrCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKysJT1NfUkVMPScuMycKKysJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisrCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKysJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisrCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKysJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisrCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKyAJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorIAlleGl0IDs7CitAQCAtMTE1Myw3ICsxMTYxLDcgQEAgRU9GCisgICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisgCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorIAlleGl0IDs7CistICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC4wKjoqKQorKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKyAJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorIAlleGl0IDs7CisgICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCitAQCAtMTE3MywxMCArMTE4MSwxMCBAQCBFT0YKKyAJCWVjaG8gbnMzMmstc25pLXN5c3YKKyAJZmkKKyAJZXhpdCA7OworLSAgICBQRU5USVVNOio6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorLSAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CistICAgICAgICBlY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CistICAgICAgICBleGl0IDs7CisrICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisrCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorKwllY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CisrCWV4aXQgOzsKKyAgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisgCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKyAJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCitAQCAtMTIwMiwxMSArMTIxMCwxMSBAQCBFT0YKKyAJZXhpdCA7OworICAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKyAJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCistCSAgICAgICAgZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorKwkJZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorIAllbHNlCistCSAgICAgICAgZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KKysJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisgCWZpCistICAgICAgICBleGl0IDs7CisrCWV4aXQgOzsKKyAgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorIAllY2hvIHBvd2VycGMtYmUtYmVvcworIAlleGl0IDs7CitAQCAtMTIxNiw2ICsxMjI0LDEyIEBAIEVPRgorICAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorIAllY2hvIGk1ODYtcGMtYmVvcworIAlleGl0IDs7CisrICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKysJZWNobyBpNTg2LXBjLWhhaWt1CisrCWV4aXQgOzsKKysgICAgeDg2XzY0OkhhaWt1Oio6KikKKysJZWNobyB4ODZfNjQtdW5rbm93bi1oYWlrdQorKwlleGl0IDs7CisgICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorIAllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKyAJZXhpdCA7OworQEAgLTEyNDIsOSArMTI1NiwyMSBAQCBFT0YKKyAJZXhpdCA7OworICAgICAqOkRhcndpbjoqOiopCisgCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCistCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorLQkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKKy0JZXNhYworKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisrCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gdW5rbm93biA7IHRoZW4KKysJICAgIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjCisrCWZpCisrCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisrCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKysJICAgIHRoZW4KKysJCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorKwkJICAgIGkzODYpIFVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKKysJCSAgICBwb3dlcnBjKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYzY0IDs7CisrCQllc2FjCisrCSAgICBmaQorKwlmaQorIAllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisgCWV4aXQgOzsKKyAgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCitAQCAtMTI1OCw3ICsxMjg0LDEwIEBAIEVPRgorICAgICAqOlFOWDoqOjQqKQorIAllY2hvIGkzODYtcGMtcW54CisgCWV4aXQgOzsKKy0gICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisrCWVjaG8gbmVvLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisrCWV4aXQgOzsKKysgICAgTlNFLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQorIAllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorIAlleGl0IDs7CisgICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKK0BAIC0xMzAzLDEzICsxMzMyLDEzIEBAIEVPRgorIAllY2hvIHBkcDEwLXVua25vd24taXRzCisgCWV4aXQgOzsKKyAgICAgU0VJOio6KjpTRUlVWCkKKy0gICAgICAgIGVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisrCWVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisgCWV4aXQgOzsKKyAgICAgKjpEcmFnb25GbHk6KjoqKQorIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisgCWV4aXQgOzsKKyAgICAgKjoqVk1TOio6KikKKy0gICAgCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisrCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisgCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisgCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworIAkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworQEAgLTEzMjQsMTEgKzEzNTMsMTQgQEAgRU9GCisgICAgIGkqODY6cmRvczoqOiopCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisgCWV4aXQgOzsKKysgICAgaSo4NjpBUk9TOio6KikKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKKysJZXhpdCA7OworKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1lc3gKKysJZXhpdCA7OworIGVzYWMKKyAKKy0jZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKy0jZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCistCisgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorIGNhdCA+JGR1bW15LmMgPDxFT0YKKyAjaWZkZWYgX1NFUVVFTlRfCitAQCAtMTM0NiwxMSArMTM3OCwxMSBAQCBtYWluICgpCisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorICNpZmRlZiBORVdTT1M0CistICAgICAgICAgICI0IgorKwkiNCIKKyAjZWxzZQorLQkgICIiCisrCSIiCisgI2VuZGlmCistICAgICAgICAgKTsgZXhpdCAoMCk7CisrCSk7IGV4aXQgKDApOworICNlbmRpZgorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2NvbmZpZy9jb25maWcuc3ViIGIvY29uZmlnL2NvbmZpZy5zdWIKK2luZGV4IDY3NTk4MjUuLjk2MzNkYjcgMTAwNzU1CistLS0gYS9jb25maWcvY29uZmlnLnN1YgorKysrIGIvY29uZmlnL2NvbmZpZy5zdWIKK0BAIC0xLDQ0ICsxLDQwIEBACisgIyEgL2Jpbi9zaAorICMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgorLSMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCistIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKKy0jICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgIENvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistdGltZXN0YW1wPScyMDA4LTAxLTE2JworK3RpbWVzdGFtcD0nMjAxMy0wOC0xMCcKKyAKKy0jIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKy0jIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKKy0jIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCistIworLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAjCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCisgIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCistIyAwMjExMC0xMzAxLCBVU0EuCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICMKKyAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyAjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorICMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKy0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKysjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisrIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCisgCisgCistIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKy0jIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKysjIFBsZWFzZSBzZW5kIHBhdGNoZXMgd2l0aCBhIENoYW5nZUxvZyBlbnRyeSB0byBjb25maWctcGF0Y2hlc0BnbnUub3JnLgorICMKKyAjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorICMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgorICMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisgIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorIAorKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisrIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisrCisgIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyAjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworICMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KK0BAIC03Miw4ICs2OCw3IEBAIFJlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisgdmVyc2lvbj0iXAorIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQorIAorLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKy0yMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCisgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCitAQCAtMTIwLDEyICsxMTUsMTggQEAgZXNhYworICMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKy0gIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IGxpbnV4LXVjbGliYyogfCBcCistICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisrICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKysgIGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorKyAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKysgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKKyAgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICAgb3M9LSRtYXliZV9vcworICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgICA7OworKyAgYW5kcm9pZC1saW51eCkKKysgICAgb3M9LWxpbnV4LWFuZHJvaWQKKysgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AtdW5rbm93bgorKyAgICA7OworICAgKikKKyAgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KK0BAIC0xNDgsMTAgKzE0OSwxMyBAQCBjYXNlICRvcyBpbgorIAktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorIAktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorIAktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKy0JLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSkKKysJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKikKKyAJCW9zPQorIAkJYmFzaWNfbWFjaGluZT0kMQorIAkJOzsKKysJLWJsdWVnZW5lKikKKysJCW9zPS1jbmsKKysJCTs7CisgCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorIAkJb3M9CisgCQliYXNpY19tYWNoaW5lPSQxCitAQCAtMTY2LDEwICsxNzAsMTAgQEAgY2FzZSAkb3MgaW4KKyAJCW9zPS1jaG9ydXNvcworIAkJYmFzaWNfbWFjaGluZT0kMQorIAkJOzsKKy0gCS1jaG9ydXNyZGIpCistIAkJb3M9LWNob3J1c3JkYgorKwktY2hvcnVzcmRiKQorKwkJb3M9LWNob3J1c3JkYgorIAkJYmFzaWNfbWFjaGluZT0kMQorLSAJCTs7CisrCQk7OworIAktaGl1eCopCisgCQlvcz0taGl1eHdlMgorIAkJOzsKK0BAIC0yMTQsNiArMjE4LDEyIEBAIGNhc2UgJG9zIGluCisgCS1pc2MqKQorIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorIAkJOzsKKysJLWx5bngqMTc4KQorKwkJb3M9LWx5bnhvczE3OAorKwkJOzsKKysJLWx5bngqNSkKKysJCW9zPS1seW54b3M1CisrCQk7OworIAktbHlueCopCisgCQlvcz0tbHlueG9zCisgCQk7OworQEAgLTIzOCwyNCArMjQ4LDM0IEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKyAJMTc1MGEgfCA1ODAgXAorIAl8IGEyOWsgXAorKwl8IGFhcmNoNjQgfCBhYXJjaDY0X2JlIFwKKyAJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorIAl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorIAl8IGFtMzNfMi4wIFwKKy0JfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisrCXwgYXJjIHwgYXJjZWIgXAorKwl8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzItOF0gfCBhcm12WzMtOF1bbGJdIHwgYXJtdjdbYXJtXSBcCisrCXwgYXZyIHwgYXZyMzIgXAorKwl8IGJlMzIgfCBiZTY0IFwKKyAJfCBiZmluIFwKKy0JfCBjNHggfCBjbGlwcGVyIFwKKysJfCBjNHggfCBjODA1MSB8IGNsaXBwZXIgXAorIAl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCisrCXwgZXBpcGhhbnkgXAorIAl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKyAJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorKwl8IGhleGFnb24gXAorIAl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorIAl8IGlwMmsgfCBpcTIwMDAgXAorKwl8IGxlMzIgfCBsZTY0IFwKKysJfCBsbTMyIFwKKyAJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKy0JfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgXAorKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtaWNyb2JsYXplZWwgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKyAJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKyAJfCBtaXBzMTYgXAorIAl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKy0JfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKyAJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisrCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKyAJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisgCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorIAl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKK0BAIC0yNjYsMzEgKzI4Niw0NSBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKyAJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisgCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKysJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCisgCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKyAJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisrCXwgbW94aWUgXAorIAl8IG10IFwKKyAJfCBtc3A0MzAgXAorLQl8IG5pb3MgfCBuaW9zMiBcCisrCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisrCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAorIAl8IG5zMTZrIHwgbnMzMmsgXAorLQl8IG9yMzIgXAorKwl8IG9wZW44IFwKKysJfCBvcjFrIHwgb3IzMiBcCisgCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKy0JfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCisrCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKKyAJfCBweXJhbWlkIFwKKysJfCBybDc4IHwgcnggXAorIAl8IHNjb3JlIFwKKy0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisgCXwgc2g2NCB8IHNoNjRsZSBcCisgCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorIAl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCistCXwgc3B1IHwgc3Ryb25nYXJtIFwKKy0JfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM4MCB8IHRyb24gXAorLQl8IHY4NTAgfCB2ODUwZSBcCisrCXwgc3B1IFwKKysJfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorKwl8IHViaWNvbTMyIFwKKysJfCB2ODUwIHwgdjg1MGUgfCB2ODUwZTEgfCB2ODUwZTIgfCB2ODUwZXMgfCB2ODUwZTJ2MyBcCisgCXwgd2UzMmsgXAorLQl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorLQl8IHo4aykKKysJfCB4ODYgfCB4YzE2eCB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisrCXwgejhrIHwgejgwKQorIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisgCQk7OworLQltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCistCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKysJYzU0eCkKKysJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKysJCTs7CisrCWM1NXgpCisrCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisrCQk7OworKwljNngpCisrCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKysJCTs7CisrCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IHBpY29jaGlwKQorIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisgCQlvcz0tbm9uZQorIAkJOzsKK0BAIC0zMDAsNiArMzM0LDIxIEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorIAkJOzsKKyAKKysJc3Ryb25nYXJtIHwgdGh1bWIgfCB4c2NhbGUpCisrCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisrCQk7OworKwl4Z2F0ZSkKKysJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorKwkJb3M9LW5vbmUKKysJCTs7CisrCXhzY2FsZWViKQorKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisrCQk7OworKworKwl4c2NhbGVlbCkKKysJCWJhc2ljX21hY2hpbmU9YXJtZWwtdW5rbm93bgorKwkJOzsKKysKKyAJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKyAJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisgCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KK0BAIC0zMTQsMjkgKzM2MywzNyBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisgCTU4MC0qIFwKKyAJfCBhMjlrLSogXAorKwl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCisgCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisgCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKy0JfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKysJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIHwgYXJjZWItKiBcCisgCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisgCXwgYXZyLSogfCBhdnIzMi0qIFwKKysJfCBiZTMyLSogfCBiZTY0LSogXAorIAl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKy0JfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiB8IGM1NHgtKiB8IGM1NXgtKiB8IGM2eC0qIFwKKy0JfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKKysJfCBjODA1MS0qIHwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKyAJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisgCXwgZWx4c2ktKiBcCisgCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorIAl8IGg4MzAwLSogfCBoODUwMC0qIFwKKyAJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorKwl8IGhleGFnb24tKiBcCisgCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKyAJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisrCXwgbGUzMi0qIHwgbGU2NC0qIFwKKysJfCBsbTMyLSogXAorIAl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKyAJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorLQl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisrCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiBcCisrCXwgbWljcm9ibGF6ZS0qIHwgbWljcm9ibGF6ZWVsLSogXAorIAl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKyAJfCBtaXBzMTYtKiBcCisgCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKy0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKysJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorIAl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorIAl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisgCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKyAJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorQEAgLTM0NywzMSArNDA0LDM3IEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKyAJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorIAl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorKwl8IG1pcHNyNTkwMC0qIHwgbWlwc3I1OTAwZWwtKiBcCisgCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisgCXwgbW1peC0qIFwKKyAJfCBtdC0qIFwKKyAJfCBtc3A0MzAtKiBcCistCXwgbmlvcy0qIHwgbmlvczItKiBcCisrCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCisrCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCisgCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisrCXwgb3BlbjgtKiBcCisgCXwgb3Jpb24tKiBcCisgCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCistCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKKysJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiBcCisgCXwgcHlyYW1pZC0qIFwKKy0JfCByb21wLSogfCByczYwMDAtKiBcCistCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKysJfCBybDc4LSogfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKyAJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKyAJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisgCXwgc3BhcmNsaXRlLSogXAorLQl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3Ryb25nYXJtLSogfCBzdjEtKiB8IHN4Py0qIFwKKy0JfCB0YWhvZS0qIHwgdGh1bWItKiBcCisrCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdjEtKiB8IHN4Py0qIFwKKysJfCB0YWhvZS0qIFwKKyAJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisrCXwgdGlsZSotKiBcCisgCXwgdHJvbi0qIFwKKy0JfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAorKwl8IHViaWNvbTMyLSogXAorKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2ODUwZTEtKiB8IHY4NTBlcy0qIHwgdjg1MGUyLSogfCB2ODUwZTJ2My0qIFwKKysJfCB2YXgtKiBcCisgCXwgd2UzMmstKiBcCistCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisrCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiBcCisgCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorIAl8IHltcC0qIFwKKy0JfCB6OGstKikKKysJfCB6OGstKiB8IHo4MC0qKQorIAkJOzsKKyAJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorIAl4dGVuc2EqKQorQEAgLTM5Myw3ICs0NTYsNyBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisgCQlvcz0tdWRpCisgCQk7OworLSAgICAJYWJhY3VzKQorKwlhYmFjdXMpCisgCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisgCQk7OworIAlhZG9iZTY4aykKK0BAIC00MzksNiArNTAyLDEwIEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKyAJCW9zPS1ic2QKKyAJCTs7CisrCWFyb3MpCisrCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKysJCW9zPS1hcm9zCisrCQk7OworIAlhdXgpCisgCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKyAJCW9zPS1hdXgKK0BAIC00NTUsMTAgKzUyMiwyNyBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKyAJCW9zPS1saW51eAorIAkJOzsKKysJYmx1ZWdlbmUqKQorKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorKwkJb3M9LWNuaworKwkJOzsKKysJYzU0eC0qKQorKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKysJCTs7CisrCWM1NXgtKikKKysJCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisrCQk7OworKwljNngtKikKKysJCWJhc2ljX21hY2hpbmU9dGljNngtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKysJCTs7CisgCWM5MCkKKyAJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKyAJCW9zPS11bmljb3MKKyAJCTs7CisrCWNlZ2NjKQorKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorKwkJb3M9LWNlZ2NjCisrCQk7OworIAljb252ZXgtYzEpCisgCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorIAkJb3M9LWJzZAorQEAgLTQ4Nyw3ICs1NzEsNyBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisgCQlvcz0tdW5pY29zbXAKKyAJCTs7CistCWNyMTYpCisrCWNyMTYgfCBjcjE2LSopCisgCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorIAkJb3M9LWVsZgorIAkJOzsKK0BAIC01MjYsNiArNjEwLDEwIEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorIAkJb3M9LXN5c3YzCisgCQk7OworKwlkaWNvcykKKysJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworKwkJb3M9LWRpY29zCisrCQk7OworIAlkamdwcCkKKyAJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworIAkJb3M9LW1zZG9zZGpncHAKK0BAIC02NDEsNyArNzI5LDYgQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAlpMzcwLWlibSogfCBpYm0qKQorIAkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorIAkJOzsKKy0jIEknbSBub3Qgc3VyZSB3aGF0ICJTeXN2MzIiIG1lYW5zLiAgU2hvdWxkIHRoaXMgYmUgc3lzdjMuMj8KKyAJaSo4NnYzMikKKyAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorIAkJb3M9LXN5c3YzMgorQEAgLTY5OSw4ICs3ODYsMTUgQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisgCQlvcz0tc3lzdgorIAkJOzsKKysJbWljcm9ibGF6ZSopCisrCQliYXNpY19tYWNoaW5lPW1pY3JvYmxhemUteGlsaW54CisrCQk7OworKwltaW5ndzY0KQorKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKysJCW9zPS1taW5ndzY0CisrCQk7OworIAltaW5ndzMyKQorLQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisrCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKyAJCW9zPS1taW5ndzMyCisgCQk7OworIAltaW5ndzMyY2UpCitAQCAtNzM1LDEwICs4MjksMTggQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAltczEtKikKKyAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKyAJCTs7CisrCW1zeXMpCisrCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKysJCW9zPS1tc3lzCisrCQk7OworIAltdnMpCisgCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisgCQlvcz0tbXZzCisgCQk7OworKwluYWNsKQorKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKysJCW9zPS1uYWNsCisrCQk7OworIAluY3IzMDAwKQorIAkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorIAkJb3M9LXN5c3Y0CitAQCAtODAzLDYgKzkwNSwxMiBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCW5wMSkKKyAJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCisgCQk7OworKwluZW8tdGFuZGVtKQorKwkJYmFzaWNfbWFjaGluZT1uZW8tdGFuZGVtCisrCQk7OworKwluc2UtdGFuZGVtKQorKwkJYmFzaWNfbWFjaGluZT1uc2UtdGFuZGVtCisrCQk7OworIAluc3ItdGFuZGVtKQorIAkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCisgCQk7OworQEAgLTg4NSw5ICs5OTMsMTAgQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAkJOzsKKyAJcG93ZXIpCWJhc2ljX21hY2hpbmU9cG93ZXItaWJtCisgCQk7OworLQlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisrCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorIAkJOzsKKy0JcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorKwlwcGMtKiB8IHBwY2JlLSopCisrCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKyAJCTs7CisgCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorIAkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtdW5rbm93bgorQEAgLTkxMiw3ICsxMDIxLDExIEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisgCQlvcz0tcHczMgorIAkJOzsKKy0JcmRvcykKKysJcmRvcyB8IHJkb3M2NCkKKysJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisrCQlvcz0tcmRvcworKwkJOzsKKysJcmRvczMyKQorIAkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisgCQlvcz0tcmRvcworIAkJOzsKK0BAIC05ODEsNiArMTA5NCw5IEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisgCQlvcz0tc3lzdjQKKyAJCTs7CisrCXN0cm9uZ2FybS0qIHwgdGh1bWItKikKKysJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisrCQk7OworIAlzdW4yKQorIAkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisgCQk7OworQEAgLTEwMzcsMjAgKzExNTMsOCBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisgCQlvcz0tdW5pY29zCisgCQk7OworLQl0aWM1NHggfCBjNTR4KikKKy0JCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKy0JCW9zPS1jb2ZmCistCQk7OworLQl0aWM1NXggfCBjNTV4KikKKy0JCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKy0JCW9zPS1jb2ZmCistCQk7OworLQl0aWM2eCB8IGM2eCopCistCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKy0JCW9zPS1jb2ZmCistCQk7OworIAl0aWxlKikKKy0JCWJhc2ljX21hY2hpbmU9dGlsZS11bmtub3duCisrCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKyAJCW9zPS1saW51eC1nbnUKKyAJCTs7CisgCXR4MzkpCitAQCAtMTEyMCw2ICsxMjI0LDkgQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAl4cHMgfCB4cHMxMDApCisgCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKyAJCTs7CisrCXhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKikKKysJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKysJCTs7CisgCXltcCkKKyAJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKyAJCW9zPS11bmljb3MKK0BAIC0xMTI4LDYgKzEyMzUsMTAgQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorIAkJb3M9LXNpbQorIAkJOzsKKysJejgwLSotY29mZikKKysJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKysJCW9zPS1zaW0KKysJCTs7CisgCW5vbmUpCisgCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQorIAkJb3M9LW5vbmUKK0BAIC0xMTY2LDcgKzEyNzcsNyBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCXdlMzJrKQorIAkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKyAJCTs7CistCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKysJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorIAkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisgCQk7OworIAlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKK0BAIC0xMjEzLDkgKzEzMjQsMTIgQEAgZXNhYworIGlmIFsgeCIkb3MiICE9IHgiIiBdCisgdGhlbgorIGNhc2UgJG9zIGluCistICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworLSAgICAgICAgIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKysJIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKKysJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKyAJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisrCS1hdXJvcmF1eCkKKysJCW9zPS1hdXJvcmF1eAorKwkJOzsKKyAJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisgCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisgCQk7OworQEAgLTEyMzYsMjEgKzEzNTAsMjMgQEAgY2FzZSAkb3MgaW4KKyAJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKyAJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorIAktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCistCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCistCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisrCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKysJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKKyAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCistCSAgICAgIHwgLWFvcyogXAorKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKKyAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKyAJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisgCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKKy0JICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKysJICAgICAgfCAtYml0cmlnKiB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAorIAkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKyAJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorIAkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisgCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorLQkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCistCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKy0JICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorKwkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisrCSAgICAgIHwgLW1pbmd3MzIqIHwgLW1pbmd3NjQqIHwgLWxpbnV4LWdudSogfCAtbGludXgtYW5kcm9pZCogXAorKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LW11c2wqIHwgLWxpbnV4LXVjbGliYyogXAorIAkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisgCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisgCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorQEAgLTEyNTgsNyArMTM3NCw3IEBAIGNhc2UgJG9zIGluCisgCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKyAJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisgCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCistCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqKQorKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisgCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKyAJCTs7CisgCS1xbngqKQorQEAgLTEyOTcsNyArMTQxMyw3IEBAIGNhc2UgJG9zIGluCisgCS1vcGVuZWQqKQorIAkJb3M9LW9wZW5lZGl0aW9uCisgCQk7OworLSAgICAgICAgLW9zNDAwKikKKysJLW9zNDAwKikKKyAJCW9zPS1vczQwMAorIAkJOzsKKyAJLXdpbmNlKikKK0BAIC0xMzQ2LDcgKzE0NjIsNyBAQCBjYXNlICRvcyBpbgorIAktc2luaXgqKQorIAkJb3M9LXN5c3Y0CisgCQk7OworLSAgICAgICAgLXRwZiopCisrCS10cGYqKQorIAkJb3M9LXRwZgorIAkJOzsKKyAJLXRyaXRvbiopCitAQCAtMTM4MiwxMiArMTQ5OCwxNCBAQCBjYXNlICRvcyBpbgorIAktYXJvcyopCisgCQlvcz0tYXJvcworIAkJOzsKKy0JLWthb3MqKQorLQkJb3M9LWthb3MKKy0JCTs7CisgCS16dm1vZSkKKyAJCW9zPS16dm1vZQorIAkJOzsKKysJLWRpY29zKikKKysJCW9zPS1kaWNvcworKwkJOzsKKysJLW5hY2wqKQorKwkJOzsKKyAJLW5vbmUpCisgCQk7OworIAkqKQorQEAgLTE0MTAsMTAgKzE1MjgsMTAgQEAgZWxzZQorICMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisgCisgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorLSAgICAgICAgc2NvcmUtKikKKysJc2NvcmUtKikKKyAJCW9zPS1lbGYKKyAJCTs7CistICAgICAgICBzcHUtKikKKysJc3B1LSopCisgCQlvcz0tZWxmCisgCQk7OworIAkqLWFjb3JuKQorQEAgLTE0MjUsOCArMTU0MywyMyBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCWFybSotc2VtaSkKKyAJCW9zPS1hb3V0CisgCQk7OworLSAgICAgICAgYzR4LSogfCB0aWM0eC0qKQorLSAgICAgICAgCW9zPS1jb2ZmCisrCWM0eC0qIHwgdGljNHgtKikKKysJCW9zPS1jb2ZmCisrCQk7OworKwljODA1MS0qKQorKwkJb3M9LWVsZgorKwkJOzsKKysJaGV4YWdvbi0qKQorKwkJb3M9LWVsZgorKwkJOzsKKysJdGljNTR4LSopCisrCQlvcz0tY29mZgorKwkJOzsKKysJdGljNTV4LSopCisrCQlvcz0tY29mZgorKwkJOzsKKysJdGljNngtKikKKysJCW9zPS1jb2ZmCisgCQk7OworIAkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisgCXBkcDEwLSopCitAQCAtMTQ0NiwxNCArMTU3OSwxMSBAQCBjYXNlICRiYXNpY19tYWNoaW5lIGluCisgCQk7OworIAltNjgwMDAtc3VuKQorIAkJb3M9LXN1bm9zMworLQkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCistCQkjIGRlZmF1bHQuCistCQkjIG9zPS1zdW5vczQKKyAJCTs7CisgCW02OCotY2lzY28pCisgCQlvcz0tYW91dAorIAkJOzsKKy0gICAgICAgIG1lcC0qKQorKwltZXAtKikKKyAJCW9zPS1lbGYKKyAJCTs7CisgCW1pcHMqLWNpc2NvKQorQEAgLTE0NjIsNiArMTU5Miw5IEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJbWlwcyotKikKKyAJCW9zPS1lbGYKKyAJCTs7CisrCW9yMWstKikKKysJCW9zPS1lbGYKKysJCTs7CisgCW9yMzItKikKKyAJCW9zPS1jb2ZmCisgCQk7OworQEAgLTE0ODAsNyArMTYxMyw3IEBAIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAJKi1pYm0pCisgCQlvcz0tYWl4CisgCQk7OworLSAgICAJKi1rbnV0aCkKKysJKi1rbnV0aCkKKyAJCW9zPS1tbWl4d2FyZQorIAkJOzsKKyAJKi13ZWMpCitAQCAtMTU4NSw3ICsxNzE4LDcgQEAgY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorIAkJCS1zdW5vcyopCisgCQkJCXZlbmRvcj1zdW4KKyAJCQkJOzsKKy0JCQktYWl4KikKKysJCQktY25rKnwtYWl4KikKKyAJCQkJdmVuZG9yPWlibQorIAkJCQk7OworIAkJCS1iZW9zKikKK2RpZmYgLS1naXQgYS9jb25maWcvZGVwY29tcCBiL2NvbmZpZy9kZXBjb21wCitpbmRleCBlNWY5NzM2Li40ZWJkNWIzIDEwMDc1NQorLS0tIGEvY29uZmlnL2RlcGNvbXAKKysrKyBiL2NvbmZpZy9kZXBjb21wCitAQCAtMSwxMCArMSw5IEBACisgIyEgL2Jpbi9zaAorICMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cworIAorLXNjcmlwdHZlcnNpb249MjAwNy0wMy0yOS4wMQorK3NjcmlwdHZlcnNpb249MjAxMy0wNS0zMC4wNzsgIyBVVEMKKyAKKy0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorQEAgLTE3LDkgKzE2LDcgQEAgc2NyaXB0dmVyc2lvbj0yMDA3LTAzLTI5LjAxCisgIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCistIyAwMjExMC0xMzAxLCBVU0EuCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyAjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorQEAgLTMwLDkgKzI3LDkgQEAgc2NyaXB0dmVyc2lvbj0yMDA3LTAzLTI5LjAxCisgCisgY2FzZSAkMSBpbgorICAgJycpCistICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCistICAgICBleGl0IDE7CistICAgICA7OworKyAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKysgICAgZXhpdCAxOworKyAgICA7OworICAgLWggfCAtLWgqKQorICAgICBjYXQgPDxcRU9GCisgVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KK0BAIC00MiwxMSArMzksMTEgQEAgYXMgc2lkZS1lZmZlY3RzLgorIAorIEVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKy0gIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorLSAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5IGBQUk9HUkFNUyBBUkdTJy4KKysgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgJ1BST0dSQU1TIEFSR1MnLgorKyAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5ICdQUk9HUkFNUyBBUkdTJy4KKyAgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorLSAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0aW5nIGRlcGVuZGVuY2llcy4KKysgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgZGVwZW5kZW5jaWVzLgorICAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCisgCisgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0BAIC01OSw2ICs1Niw2NiBAQCBFT0YKKyAgICAgOzsKKyBlc2FjCisgCisrIyBHZXQgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IGluIHRoZQorKyMgZ2xvYmFsIHZhcmlhYmxlcyAnJGRpcicuICBOb3RlIHRoYXQgdGhpcyBkaXJlY3RvcnkgY29tcG9uZW50IHdpbGwKKysjIGJlIGVpdGhlciBlbXB0eSBvciBlbmRpbmcgd2l0aCBhICcvJyBjaGFyYWN0ZXIuICBUaGlzIGlzIGRlbGliZXJhdGUuCisrc2V0X2Rpcl9mcm9tICgpCisreworKyAgY2FzZSAkMSBpbgorKyAgICAqLyopIGRpcj1gZWNobyAiJDEiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYDs7CisrICAgICAgKikgZGlyPTs7CisrICBlc2FjCisrfQorKworKyMgR2V0IHRoZSBzdWZmaXgtc3RyaXBwZWQgYmFzZW5hbWUgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IHRoZQorKyMgZ2xvYmFsIHZhcmlhYmxlICckYmFzZScuCisrc2V0X2Jhc2VfZnJvbSAoKQorK3sKKysgIGJhc2U9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuW14uXSokLy8nYAorK30KKysKKysjIElmIG5vIGRlcGVuZGVuY3kgZmlsZSB3YXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaW52b2NhdGlvbiwKKysjIHdlIHN0aWxsIGhhdmUgdG8gY3JlYXRlIGEgZHVtbXkgZGVwZmlsZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlCisrIyBNYWtlZmlsZSAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyttYWtlX2R1bW15X2RlcGZpbGUgKCkKKyt7CisrICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorK30KKysKKysjIEZhY3RvciBvdXQgc29tZSBjb21tb24gcG9zdC1wcm9jZXNzaW5nIG9mIHRoZSBnZW5lcmF0ZWQgZGVwZmlsZS4KKysjIFJlcXVpcmVzIHRoZSBhdXhpbGlhcnkgZ2xvYmFsIHZhcmlhYmxlICckdG1wZGVwZmlsZScgdG8gYmUgc2V0LgorK2FpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZSAoKQorK3sKKysgICMgSWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IG1hbmFnZWQgdG8gcHJvZHVjZSBhIGRlcGVuZGVuY3kgZmlsZSwKKysgICMgcG9zdC1wcm9jZXNzIGl0LgorKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisrICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubzogZGVwZW5kZW5jeS5oJy4KKysgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKysgICAgIyAgICRvYmplY3Q6IGRlcGVuZGVuY3kuaAorKyAgICAjIGFuZCBvbmUgdG8gc2ltcGx5IG91dHB1dAorKyAgICAjICAgZGVwZW5kZW5jeS5oOgorKyAgICAjIHdoaWNoIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgZGVsZXRlZC1oZWFkZXIgcHJvYmxlbS4KKysgICAgeyBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiCisrICAgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOlskdGFiIF0qLCwiIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIgorKyAgICB9ID4gIiRkZXBmaWxlIgorKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisrICBlbHNlCisrICAgIG1ha2VfZHVtbXlfZGVwZmlsZQorKyAgZmkKKyt9CisrCisrIyBBIHRhYnVsYXRpb24gY2hhcmFjdGVyLgorK3RhYj0nCScKKysjIEEgbmV3bGluZSBjaGFyYWN0ZXIuCisrbmw9JworKycKKysjIENoYXJhY3RlciByYW5nZXMgbWlnaHQgYmUgcHJvYmxlbWF0aWMgb3V0c2lkZSB0aGUgQyBsb2NhbGUuCisrIyBUaGVzZSBkZWZpbml0aW9ucyBoZWxwLgorK3VwcGVyPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaCisrbG93ZXI9YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKytkaWdpdHM9MDEyMzQ1Njc4OQorK2FscGhhPSR7dXBwZXJ9JHtsb3dlcn0KKysKKyBpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICAgZXhpdCAxCitAQCAtNzEsNiArMTI4LDkgQEAgdG1wZGVwZmlsZT0ke3RtcGRlcGZpbGUtYGVjaG8gIiRkZXBmaWxlIiB8IHNlZCAncy9cLlwoW14uXSpcKSQvLlRcMS8nYH0KKyAKKyBybSAtZiAiJHRtcGRlcGZpbGUiCisgCisrIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgorK2djY2ZsYWc9IGRhc2htZmxhZz0KKysKKyAjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyAjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAorICMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKK0BAIC04Miw5ICsxNDIsMzIgQEAgaWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyBmaQorIAorIGlmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorLSAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KKy0gICBkYXNobWZsYWc9LXhNCistICAgZGVwbW9kZT1kYXNobXN0ZG91dAorKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgorKyAgZGFzaG1mbGFnPS14TQorKyAgZGVwbW9kZT1kYXNobXN0ZG91dAorK2ZpCisrCisrY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCisraWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Y21zeXM7IHRoZW4KKysgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2aXN1YWxjcHAgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisrICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKysgIGN5Z3BhdGhfdT0nc2VkIHMsXFxcXCwvLGcnCisrICBkZXBtb2RlPW1zdmlzdWFsY3BwCisrZmkKKysKKytpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KKysgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2YzcgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisrICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKysgIGN5Z3BhdGhfdT0nc2VkIHMsXFxcXCwvLGcnCisrICBkZXBtb2RlPW1zdmM3CisrZmkKKysKKytpZiB0ZXN0ICIkZGVwbW9kZSIgPSB4bGM7IHRoZW4KKysgICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KKysgIGdjY2ZsYWc9LXFtYWtlZGVwPWdjYywtTUYKKysgIGRlcG1vZGU9Z2NjCisgZmkKKyAKKyBjYXNlICIkZGVwbW9kZSIgaW4KK0BAIC0xMDcsOCArMTkwLDcgQEAgZ2NjMykKKyAgIGRvbmUKKyAgICIkQCIKKyAgIHN0YXQ9JD8KKy0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorLSAgZWxzZQorKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgIGV4aXQgJHN0YXQKKyAgIGZpCitAQCAtMTE2LDEzICsxOTgsMTcgQEAgZ2NjMykKKyAgIDs7CisgCisgZ2NjKQorKyMjIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QganVzdCBjYXRlciB0byBvYnNvc2V0ZSBwcmUtMy54IEdDQyBjb21waWxlcnMuCisrIyMgYnV0IGFsc28gdG8gaW4tdXNlIGNvbXBpbGVycyBsaWtlIElNQiB4bGMveGxDIGFuZCB0aGUgSFAgQyBjb21waWxlci4KKysjIyAoc2VlIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHRvICRnY2NmbGFnIGFib3ZlKS4KKyAjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworICMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgorICMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCisgIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorICMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCisgIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKKy0jIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKysjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4gIEFsc28sIGl0IG1pZ2h0IG5vdCBiZQorKyMjICAgc3VwcG9ydGVkIGJ5IHRoZSBvdGhlciBjb21waWxlcnMgd2hpY2ggdXNlIHRoZSAnZ2NjJyBkZXBtb2RlLgorICMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKKyAjIyAgIHRoYW4gcmVuYW1pbmcpLgorICAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCitAQCAtMTMwLDMxICsyMTYsMzEgQEAgZ2NjKQorICAgZmkKKyAgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICAgc3RhdD0kPworLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CistICBlbHNlCisrICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICAgZXhpdCAkc3RhdAorICAgZmkKKyAgIHJtIC1mICIkZGVwZmlsZSIKKyAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCistICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CistIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorKyAgIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlCisrICAjIGxldHRlcnMuCisgICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKKyAgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCistIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisrIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgImRlbGV0ZWQgaGVhZGVyIGZpbGUiIHByb2JsZW0uCisgIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKKyAjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyAjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworICMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KKyAjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKy0gIHRyICcgJyAnCistJyA8ICIkdG1wZGVwZmlsZSIgfAorLSMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLiAgT24gdGhlIHRoZW9yeQorICMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworLSMjIHdlbGwuCisrIyMgd2VsbC4gIGhwIGRlcG1vZGUgYWxzbyBhZGRzIHRoYXQgc3BhY2UsIGJ1dCBhbHNvIHByZWZpeGVzIHRoZSBWUEFUSAorKyMjIHRvIHRoZSBvYmplY3QuICBUYWtlIGNhcmUgdG8gbm90IHJlcGVhdCBpdCBpbiB0aGUgb3V0cHV0LgorICMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisgIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKy0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisrICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKysgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICJzfC4qJG9iamVjdCR8fCIgLWUgJy86JC9kJyBcCisrICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworIAorQEAgLTE3Miw4ICsyNTgsNyBAQCBzZ2kpCisgICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgIGZpCisgICBzdGF0PSQ/CistICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKy0gIGVsc2UKKysgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgICBleGl0ICRzdGF0CisgICBmaQorQEAgLTE4MSw0MyArMjY2LDQxIEBAIHNnaSkKKyAKKyAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorLQorICAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgICMgbGluZXMgd2l0aCBtb3JlIHRoYW4gYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyAoNDA5NiBpbgorICAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworLSAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisrICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlICcjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAgIyBkZXBlbmRlbmN5IGxpbmUuCistICAgIHRyICcgJyAnCistJyA8ICIkdG1wZGVwZmlsZSIgXAorLSAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCistICAgIHRyICcKKy0nICcgJyA+PiAkZGVwZmlsZQorLSAgICBlY2hvID4+ICRkZXBmaWxlCistCisrICAgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCisrICAgICAgfCB0ciAiJG5sIiAnICcgPj4gIiRkZXBmaWxlIgorKyAgICBlY2hvID4+ICIkZGVwZmlsZSIKKyAgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCistICAgIHRyICcgJyAnCistJyA8ICIkdG1wZGVwZmlsZSIgXAorLSAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCistICAgPj4gJGRlcGZpbGUKKysgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisrICAgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKysgICAgICA+PiAiJGRlcGZpbGUiCisgICBlbHNlCistICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CistICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorLSAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKKyAgIGZpCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworIAorK3hsYykKKysgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKysgIGV4aXQgMQorKyAgOzsKKysKKyBhaXgpCisgICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorLSAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyAnJG9iamVjdDonIGF0IHRoZQorICAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorLSAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKy0gIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorLSAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgICB0bXBkZXBmaWxlMj0kYmFzZS51CitAQCAtMjMwLDkgKzMxMyw3IEBAIGFpeCkKKyAgICAgIiRAIiAtTQorICAgZmkKKyAgIHN0YXQ9JD8KKy0KKy0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorLSAgZWxzZQorKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgICBleGl0ICRzdGF0CisgICBmaQorQEAgLTI0MSw0NCArMzIyLDEwMCBAQCBhaXgpCisgICBkbworICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgIGRvbmUKKy0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorLSAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJy4KKy0gICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKy0gICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorLSAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorLSAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCistICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorLSAgZWxzZQorLSAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorLSAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKy0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKy0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKysgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorKyAgOzsKKysKKyt0Y2MpCisrICAjIHRjYyAoVGlueSBDIENvbXBpbGVyKSB1bmRlcnN0YW5kICctTUQgLU1GIGZpbGUnIHNpbmNlIHZlcnNpb24gMC45LjI2CisrICAjIEZJWE1FOiBUaGF0IHZlcnNpb24gc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYXQgdGhlIG1vbWVudCBvZiB3cml0aW5nLgorKyAgIyAgICAgICAgTWFrZSB0aGF0IHRoaXMgc3RhdGVtZW50IHJlbWFpbnMgdHJ1ZSBhbHNvIGZvciBzdGFibGUsIHJlbGVhc2VkCisrICAjICAgICAgICB2ZXJzaW9ucy4KKysgICMgSXQgd2lsbCB3cmFwIGxpbmVzIChkb2Vzbid0IG1hdHRlciB3aGV0aGVyIGxvbmcgb3Igc2hvcnQpIHdpdGggYQorKyAgIyB0cmFpbGluZyAnXCcsIGFzIGluOgorKyAgIworKyAgIyAgIGZvby5vIDogXAorKyAgIyAgICBmb28uYyBcCisrICAjICAgIGZvby5oIFwKKysgICMKKysgICMgSXQgd2lsbCBwdXQgYSB0cmFpbGluZyAnXCcgZXZlbiBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgd2lsbCB1c2UgbGVhZGluZworKyAgIyBzcGFjZXMgcmF0aGVyIHRoYW4gbGVhZGluZyB0YWJzIChhdCBsZWFzdCBzaW5jZSBpdHMgY29tbWl0IDAzOTRjYWY3CisrICAjICJFbWl0IHNwYWNlcyBmb3IgLU1EIikuCisrICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorKyAgc3RhdD0kPworKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisrICAgIGV4aXQgJHN0YXQKKyAgIGZpCisrICBybSAtZiAiJGRlcGZpbGUiCisrICAjIEVhY2ggbm9uLWVtcHR5IGxpbmUgaXMgb2YgdGhlIGZvcm0gJ2Zvby5vIDogXCcgb3IgJyBkZXAuaCBcJy4KKysgICMgV2UgaGF2ZSB0byBjaGFuZ2UgbGluZXMgb2YgdGhlIGZpcnN0IGtpbmQgdG8gJyRvYmplY3Q6IFwnLgorKyAgc2VkIC1lICJzfC4qOnwkb2JqZWN0IDp8IiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisrICAjIEFuZCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBzZWNvbmQga2luZCwgd2UgaGF2ZSB0byBlbWl0IGEgJ2RlcC5oOicKKysgICMgZHVtbXkgZGVwZW5kZW5jeSwgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCisrICBzZWQgLW4gLWUgJ3N8XiAgKlwoLipcKSAqXFwkfFwxOnxwJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgOzsKKyAKKy1pY2MpCistICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KKy0gICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYworLSAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCistICAjICAgIGZvby5vOiBzdWIvZm9vLmMKKy0gICMgICAgZm9vLm86IHN1Yi9mb28uaAorLSAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6CistICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCistICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCistICAjICAgIHN1Yi9mb28uYzoKKy0gICMgICAgc3ViL2Zvby5oOgorLSAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0CisrIyMgVGhlIG9yZGVyIG9mIHRoaXMgb3B0aW9uIGluIHRoZSBjYXNlIHN0YXRlbWVudCBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoZQorKyMjIHNoZWxsIGNvZGUgaW4gY29uZmlndXJlIHdpbGwgdHJ5IGVhY2ggb2YgdGhlc2UgZm9ybWF0cyBpbiB0aGUgb3JkZXIKKysjIyBsaXN0ZWQgaW4gdGhpcyBmaWxlLiAgQSBwbGFpbiAnLU1EJyBvcHRpb24gd291bGQgYmUgdW5kZXJzdG9vZCBieSBtYW55CisrIyMgY29tcGlsZXJzLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGlzIGNvbWVzIGFmdGVyIHRoZSBnY2MgYW5kIGljYyBvcHRpb25zLgorK3BnY2MpCisrICAjIFBvcnRsYW5kJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyAnLU1EJy4KKysgICMgV2lsbCBhbHdheXMgb3V0cHV0IGRlcHMgdG8gJ2ZpbGUuZCcgd2hlcmUgZmlsZSBpcyB0aGUgcm9vdCBuYW1lIG9mIHRoZQorKyAgIyBzb3VyY2UgZmlsZSB1bmRlciBjb21waWxhdGlvbiwgZXZlbiBpZiBmaWxlIHJlc2lkZXMgaW4gYSBzdWJkaXJlY3RvcnkuCisrICAjIFRoZSBvYmplY3QgZmlsZSBuYW1lIGRvZXMgbm90IGFmZmVjdCB0aGUgbmFtZSBvZiB0aGUgJy5kJyBmaWxlLgorKyAgIyBwZ2NjIDEwLjIgd2lsbCBvdXRwdXQKKyAgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKy0gICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKKyAgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAorICAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCisgICAjICAgICAuLi4KKysgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKysgICMgVXNlIHRoZSBzb3VyY2UsIG5vdCB0aGUgb2JqZWN0LCB0byBkZXRlcm1pbmUgdGhlIGJhc2UgbmFtZSwgc2luY2UKKysgICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KKysgIHNldF9iYXNlX2Zyb20gIiRzb3VyY2UiCisrICB0bXBkZXBmaWxlPSRiYXNlLmQKKysKKysgICMgRm9yIHByb2plY3RzIHRoYXQgYnVpbGQgdGhlIHNhbWUgc291cmNlIGZpbGUgdHdpY2UgaW50byBkaWZmZXJlbnQgb2JqZWN0CisrICAjIGZpbGVzLCB0aGUgcGdjYyBhcHByb2FjaCBvZiB1c2luZyB0aGUgKnNvdXJjZSogZmlsZSByb290IG5hbWUgY2FuIGNhdXNlCisrICAjIHByb2JsZW1zIGluIHBhcmFsbGVsIGJ1aWxkcy4gIFVzZSBhIGxvY2tpbmcgc3RyYXRlZ3kgdG8gYXZvaWQgc3RvbXBpbmcgb24KKysgICMgdGhlIHNhbWUgJHRtcGRlcGZpbGUuCisrICBsb2NrZGlyPSRiYXNlLmQtbG9jaworKyAgdHJhcCAiCisrICAgIGVjaG8gJyQwOiBjYXVnaHQgc2lnbmFsLCBjbGVhbmluZyB1cC4uLicgPiYyCisrICAgIHJtZGlyICckbG9ja2RpcicKKysgICAgZXhpdCAxCisrICAiIDEgMiAxMyAxNQorKyAgbnVtdHJpZXM9MTAwCisrICBpPSRudW10cmllcworKyAgd2hpbGUgdGVzdCAkaSAtZ3QgMDsgZG8KKysgICAgIyBta2RpciBpcyBhIHBvcnRhYmxlIHRlc3QtYW5kLXNldC4KKysgICAgaWYgbWtkaXIgIiRsb2NrZGlyIiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICMgVGhpcyBwcm9jZXNzIGFjcXVpcmVkIHRoZSBsb2NrLgorKyAgICAgICIkQCIgLU1ECisrICAgICAgc3RhdD0kPworKyAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KKysgICAgICBybWRpciAiJGxvY2tkaXIiCisrICAgICAgYnJlYWsKKysgICAgZWxzZQorKyAgICAgICMgSWYgdGhlIGxvY2sgaXMgYmVpbmcgaGVsZCBieSBhIGRpZmZlcmVudCBwcm9jZXNzLCB3YWl0CisrICAgICAgIyB1bnRpbCB0aGUgd2lubmluZyBwcm9jZXNzIGlzIGRvbmUgb3Igd2UgdGltZW91dC4KKysgICAgICB3aGlsZSB0ZXN0IC1kICIkbG9ja2RpciIgJiYgdGVzdCAkaSAtZ3QgMDsgZG8KKysgICAgICAgIHNsZWVwIDEKKysgICAgICAgIGk9YGV4cHIgJGkgLSAxYAorKyAgICAgIGRvbmUKKysgICAgZmkKKysgICAgaT1gZXhwciAkaSAtIDFgCisrICBkb25lCisrICB0cmFwIC0gMSAyIDEzIDE1CisrICBpZiB0ZXN0ICRpIC1sZSAwOyB0aGVuCisrICAgIGVjaG8gIiQwOiBmYWlsZWQgdG8gYWNxdWlyZSBsb2NrIGFmdGVyICRudW10cmllcyBhdHRlbXB0cyIgPiYyCisrICAgIGVjaG8gIiQwOiBjaGVjayBsb2NrZGlyICckbG9ja2RpciciID4mMgorKyAgICBleGl0IDEKKysgIGZpCisgCistICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorLSAgc3RhdD0kPworLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CistICBlbHNlCisrICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICAgZXhpdCAkc3RhdAorICAgZmkKK0BAIC0yOTAsOCArNDI3LDggQEAgaWNjKQorICAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorICAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorLSAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8CistICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiBcCisrICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworIAorQEAgLTMwMiw5ICs0MzksOCBAQCBocDIpCisgICAjICdmb28uZCcsIHdoaWNoIGxhbmRzIG5leHQgdG8gdGhlIG9iamVjdCBmaWxlLCB3aGVyZXZlciB0aGF0CisgICAjIGhhcHBlbnMgdG8gYmUuCisgICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCistICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorLSAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CistICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisrICBzZXRfZGlyX2Zyb20gICIkb2JqZWN0IgorKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorQEAgLTMxNSw4ICs0NTEsNyBAQCBocDIpCisgICAgICIkQCIgK01ha2VkCisgICBmaQorICAgc3RhdD0kPworLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CistICBlbHNlCisrICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICAgZXhpdCAkc3RhdAorICAgZmkKK0BAIC0zMjYsNzIgKzQ2MSwxMDcgQEAgaHAyKQorICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgIGRvbmUKKyAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorLSAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKy0gICAgIyBBZGQgYGRlcGVuZGVudC5oOicgbGluZXMuCistICAgIHNlZCAtbmUgJzIsJHs7IHMvXiAqLy87IHMvIFxcKiQvLzsgcy8kLzovOyBwO30nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorKyAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKysgICAgIyBBZGQgJ2RlcGVuZGVudC5oOicgbGluZXMuCisrICAgIHNlZCAtbmUgJzIsJHsKKysgICAgICAgICAgICAgICBzL14gKi8vCisrICAgICAgICAgICAgICAgcy8gXFwqJC8vCisrICAgICAgICAgICAgICAgcy8kLzovCisrICAgICAgICAgICAgICAgcAorKyAgICAgICAgICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgIGVsc2UKKy0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKysgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgICBmaQorICAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgorICAgOzsKKyAKKyB0cnU2NCkKKy0gICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCistICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgorLSAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKy0gICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKy0gICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCistICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKy0gICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKy0gICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCistCistICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCistICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQorLSAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bworLSAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgorLSAgICAgICMgV2l0aCBsaWJ0b29sIDEuNCwgZGVwZW5kZW5jaWVzIHdlcmUgb3V0cHV0IGluICRkaXIubGlicy8kYmFzZS5sby5kLgorLSAgICAgICMKKy0gICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdworLSAgICAgICMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UgdHdvCistICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorLSAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKy0gICAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCistICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKy0gICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworLSAgICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAorLSAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorLSAgICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBsaWJ0b29sIDEuNQorLSAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CistICAgICAgIiRAIiAtV2MsLU1ECistICAgZWxzZQorLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKKy0gICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorLSAgICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCistICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKKy0gICAgICAiJEAiIC1NRAorLSAgIGZpCistCistICAgc3RhdD0kPworLSAgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorLSAgIGVsc2UKKy0gICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorLSAgICAgIGV4aXQgJHN0YXQKKy0gICBmaQorLQorLSAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCistICAgZG8KKy0gICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworLSAgIGRvbmUKKy0gICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKy0gICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorLSAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KKy0gICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKy0gICBlbHNlCistICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKy0gICBmaQorLSAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKy0gICA7OworKyAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorKyAgIyBlZmZlY3QuICAnY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gJ2Zvby5vLmQnLgorKyAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorKyAgIyBkZXBlbmRlbmNpZXMgaW4gJ2Zvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisrICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisrICBzZXRfZGlyX2Zyb20gICIkb2JqZWN0IgorKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKysKKysgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorKyAgICAjIExpYnRvb2wgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UKKysgICAgIyB0d28gY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKysgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorKyAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCisrICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisrICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisrICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKysgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIExpa2V3aXNlLgorKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorKyAgICAiJEAiIC1XYywtTUQKKysgIGVsc2UKKysgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKysgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKysgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKysgICAgIiRAIiAtTUQKKysgIGZpCisrCisrICBzdGF0PSQ/CisrICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisrICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisrICAgIGV4aXQgJHN0YXQKKysgIGZpCisrCisrICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorKyAgZG8KKysgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisrICBkb25lCisrICAjIFNhbWUgcG9zdC1wcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEFJWCBtb2RlLgorKyAgYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlCisrICA7OworKworK21zdmM3KQorKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisrICAgIHNob3dJbmNsdWRlcz0tV2MsLXNob3dJbmNsdWRlcworKyAgZWxzZQorKyAgICBzaG93SW5jbHVkZXM9LXNob3dJbmNsdWRlcworKyAgZmkKKysgICIkQCIgJHNob3dJbmNsdWRlcyA+ICIkdG1wZGVwZmlsZSIKKysgIHN0YXQ9JD8KKysgIGdyZXAgLXYgJ15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogJyAiJHRtcGRlcGZpbGUiCisrICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisrICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKysgICAgZXhpdCAkc3RhdAorKyAgZmkKKysgIHJtIC1mICIkZGVwZmlsZSIKKysgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisrICAjIFRoZSBmaXJzdCBzZWQgcHJvZ3JhbSBiZWxvdyBleHRyYWN0cyB0aGUgZmlsZSBuYW1lcyBhbmQgZXNjYXBlcworKyAgIyBiYWNrc2xhc2hlcyBmb3IgY3lncGF0aC4gIFRoZSBzZWNvbmQgc2VkIHByb2dyYW0gb3V0cHV0cyB0aGUgZmlsZQorKyAgIyBuYW1lIHdoZW4gcmVhZGluZywgYnV0IGFsc28gYWNjdW11bGF0ZXMgYWxsIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisrICAjIGhvbGQgYnVmZmVyIGluIG9yZGVyIHRvIG91dHB1dCB0aGVtIGFnYWluIGF0IHRoZSBlbmQuICBUaGlzIG9ubHkKKysgICMgd29ya3Mgd2l0aCBzZWQgaW1wbGVtZW50YXRpb25zIHRoYXQgY2FuIGhhbmRsZSBsYXJnZSBidWZmZXJzLgorKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAnCisrL15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogICpcKC4qXCkvIHsKKysgIHMvL1wxLworKyAgcy9cXC9cXFxcL2cKKysgIHAKKyt9JyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11IHwgc2VkIC1uICcKKytzLyAvXFwgL2cKKytzL1woLipcKS8nIiR0YWIiJ1wxIFxcL3AKKytzLy5cKC4qXCkgXFwvXDE6LworK0gKKyskIHsKKysgIHMvLiovJyIkdGFiIicvCisrICBHCisrICBwCisrfScgPj4gIiRkZXBmaWxlIgorKyAgZWNobyA+PiAiJGRlcGZpbGUiICMgbWFrZSBzdXJlIHRoZSBmcmFnbWVudCBkb2Vzbid0IGVuZCB3aXRoIGEgYmFja3NsYXNoCisrICBybSAtZiAiJHRtcGRlcGZpbGUiCisrICA7OworKworK21zdmM3bXN5cykKKysgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKysgIGV4aXQgMQorKyAgOzsKKyAKKyAjbm9zaWRlZWZmZWN0KQorICAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CitAQCAtNDA0LDEzICs1NzQsMTMgQEAgZGFzaG1zdGRvdXQpCisgCisgICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCistICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKysgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgICBzaGlmdAorICAgICBkb25lCisgICAgIHNoaWZ0CisgICBmaQorIAorLSAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgorICAgSUZTPSIgIgorICAgZm9yIGFyZworICAgZG8KK0BAIC00MzAsMTggKzYwMCwxOCBAQCBkYXNobXN0ZG91dCkKKyAgIGRvbmUKKyAKKyAgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQorLSAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yICc6JworICAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorLSAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyBgYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgYGMnIG90aGVyd2lzZS4KKysgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgJ2M6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0ICdjJyBvdGhlcndpc2UuCisgICAiJEAiICRkYXNobWZsYWcgfAorLSAgICBzZWQgJ3M6XlsgIF0qW146IF1bXjpdW146XSpcOlsgICAgXSo6JyIkb2JqZWN0IidcOiA6JyA+ICIkdG1wZGVwZmlsZSIKKysgICAgc2VkICJzfF5bJHRhYiBdKlteOiR0YWIgXVteOl1bXjpdKjpbJHRhYiBdKnwkb2JqZWN0OiB8IiA+ICIkdG1wZGVwZmlsZSIKKyAgIHJtIC1mICIkZGVwZmlsZSIKKyAgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCistICB0ciAnICcgJworLScgPCAiJHRtcGRlcGZpbGUiIHwgXAorLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCistIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKy0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisrICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBzZWQgaW52b2NhdGlvbgorKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorKyAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisrICAgIHwgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIFwKKysgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisgCitAQCAtNDU1LDQxICs2MjUsNTEgQEAgbWFrZWRlcGVuZCkKKyAgICIkQCIgfHwgZXhpdCAkPworICAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCistICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKysgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgICBzaGlmdAorICAgICBkb25lCisgICAgIHNoaWZ0CisgICBmaQorICAgIyBYIG1ha2VkZXBlbmQKKyAgIHNoaWZ0CistICBjbGVhcmVkPW5vCistICBmb3IgYXJnIGluICIkQCI7IGRvCisrICBjbGVhcmVkPW5vIGVhdD1ubworKyAgZm9yIGFyZworKyAgZG8KKyAgICAgY2FzZSAkY2xlYXJlZCBpbgorICAgICBubykKKyAgICAgICBzZXQgIiI7IHNoaWZ0CisgICAgICAgY2xlYXJlZD15ZXMgOzsKKyAgICAgZXNhYworKyAgICBpZiB0ZXN0ICRlYXQgPSB5ZXM7IHRoZW4KKysgICAgICBlYXQ9bm8KKysgICAgICBjb250aW51ZQorKyAgICBmaQorICAgICBjYXNlICIkYXJnIiBpbgorICAgICAtRCp8LUkqKQorICAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAgIyBTdHJpcCBhbnkgb3B0aW9uIHRoYXQgbWFrZWRlcGVuZCBtYXkgbm90IHVuZGVyc3RhbmQuICBSZW1vdmUKKyAgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorKyAgICAtYXJjaCkKKysgICAgICBlYXQ9eWVzIDs7CisgICAgIC0qfCRvYmplY3QpCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgIGVzYWMKKyAgIGRvbmUKKy0gIG9ial9zdWZmaXg9ImBlY2hvICRvYmplY3QgfCBzZWQgJ3MvXi4qXC4vLi8nYCIKKysgIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKKyAgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgICR7TUFLRURFUEVORC1tYWtlZGVwZW5kfSAtbyIkb2JqX3N1ZmZpeCIgLWYiJHRtcGRlcGZpbGUiICIkQCIKKyAgIHJtIC1mICIkZGVwZmlsZSIKKy0gIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCistICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgfCB0ciAnICcgJworLScgfCBcCistIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKy0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorLSAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKysgICMgbWFrZWRlcGVuZCBtYXkgcHJlcGVuZCB0aGUgVlBBVEggZnJvbSB0aGUgc291cmNlIGZpbGUgbmFtZSB0byB0aGUgb2JqZWN0LgorKyAgIyBObyBuZWVkIHRvIHJlZ2V4LWVzY2FwZSAkb2JqZWN0LCBleGNlc3MgbWF0Y2hpbmcgb2YgJy4nIGlzIGhhcm1sZXNzLgorKyAgc2VkICJzfF4uKlwoJG9iamVjdCAqOlwpfFwxfCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKysgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGUgbGFzdCBpbnZvY2F0aW9uCisrICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisrICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgXAorKyAgICB8IHRyICcgJyAiJG5sIiBcCisrICAgIHwgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIFwKKysgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgIDs7CisgCitAQCAtNTAwLDEzICs2ODAsMTMgQEAgY3BwKQorIAorICAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorLSAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisrICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICAgc2hpZnQKKyAgICAgZG9uZQorICAgICBzaGlmdAorICAgZmkKKyAKKy0gICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKysgICMgUmVtb3ZlICctbyAkb2JqZWN0Jy4KKyAgIElGUz0iICIKKyAgIGZvciBhcmcKKyAgIGRvCitAQCAtNTI1LDEwICs3MDUsMTAgQEAgY3BwKQorICAgICBlc2FjCisgICBkb25lCisgCistICAiJEAiIC1FIHwKKy0gICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKy0gICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKKy0gICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKysgICIkQCIgLUUgXAorKyAgICB8IHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisrICAgICAgICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisrICAgIHwgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgIHJtIC1mICIkZGVwZmlsZSIKKyAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKK0BAIC01MzgsMzUgKzcxOCw1NiBAQCBjcHApCisgCisgbXN2aXN1YWxjcHApCisgICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKy0gICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8sCistICAjIGJlY2F1c2Ugd2UgbXVzdCB1c2UgLW8gd2hlbiBydW5uaW5nIGxpYnRvb2wuCisrICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAgIiRAIiB8fCBleGl0ICQ/CisrCisrICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisrICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisrICAgICAgc2hpZnQKKysgICAgZG9uZQorKyAgICBzaGlmdAorKyAgZmkKKysKKyAgIElGUz0iICIKKyAgIGZvciBhcmcKKyAgIGRvCisgICAgIGNhc2UgIiRhcmciIGluCisrICAgIC1vKQorKyAgICAgIHNoaWZ0CisrICAgICAgOzsKKysgICAgJG9iamVjdCkKKysgICAgICBzaGlmdAorKyAgICAgIDs7CisgICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorLQlzZXQgZm5vcmQgIiRAIgorLQlzaGlmdAorLQlzaGlmdAorLQk7OworKyAgICAgICAgc2V0IGZub3JkICIkQCIKKysgICAgICAgIHNoaWZ0CisrICAgICAgICBzaGlmdAorKyAgICAgICAgOzsKKyAgICAgKikKKy0Jc2V0IGZub3JkICIkQCIgIiRhcmciCistCXNoaWZ0CistCXNoaWZ0CistCTs7CisrICAgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKysgICAgICAgIHNoaWZ0CisrICAgICAgICBzaGlmdAorKyAgICAgICAgOzsKKyAgICAgZXNhYworICAgZG9uZQorLSAgIiRAIiAtRSB8CistICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OmVjaG8gImBjeWdwYXRoIC11IFxcIlwxXFwiYCI6cCcgfCBzb3J0IHwgdW5pcSA+ICIkdG1wZGVwZmlsZSIKKysgICIkQCIgLUUgMj4vZGV2L251bGwgfAorKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgorICAgcm0gLWYgIiRkZXBmaWxlIgorICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKy0gIC4gIiR0bXBkZXBmaWxlIiB8IHNlZCAncyUgJVxcICVnJyB8IHNlZCAtbiAnL15cKC4qXCkkLyBzOjoJXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorLSAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorLSAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgorKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjonIiR0YWIiJ1wxIFxcOnAnID4+ICIkZGVwZmlsZSIKKysgIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKKysgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworIAorK21zdmNtc3lzKQorKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisrICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisrICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorKyAgZXhpdCAxCisrICA7OworKworIG5vbmUpCisgICBleGVjICIkQCIKKyAgIDs7CitAQCAtNTg1LDUgKzc4Niw2IEBAIGV4aXQgMAorICMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorICMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorICMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCistIyB0aW1lLXN0YW1wLWVuZDogIiQiCisrIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKysjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyAjIEVuZDoKK2RpZmYgLS1naXQgYS9jb25maWcvaW5zdGFsbC1zaCBiL2NvbmZpZy9pbnN0YWxsLXNoCitpbmRleCBhNTg5N2RlLi4zNzdiYjg2IDEwMDc1NQorLS0tIGEvY29uZmlnL2luc3RhbGwtc2gKKysrKyBiL2NvbmZpZy9pbnN0YWxsLXNoCitAQCAtMSw3ICsxLDcgQEAKKyAjIS9iaW4vc2gKKyAjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorIAorLXNjcmlwdHZlcnNpb249MjAwNi0xMi0yNS4wMAorK3NjcmlwdHZlcnNpb249MjAxMS0xMS0yMC4wNzsgIyBVVEMKKyAKKyAjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyAjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorQEAgLTM1LDcgKzM1LDcgQEAgc2NyaXB0dmVyc2lvbj0yMDA2LTEyLTI1LjAwCisgIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICMKKyAjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CistIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorKyMgJ21ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyAjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisgIworICMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorQEAgLTE1Niw2ICsxNTYsMTAgQEAgd2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworIAorICAgICAtdCkgZHN0X2FyZz0kMgorKwkjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorKwljYXNlICRkc3RfYXJnIGluCisrCSAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKysJZXNhYworIAlzaGlmdDs7CisgCisgICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OworQEAgLTE4Niw2ICsxOTAsMTAgQEAgaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAgICBmaQorICAgICBzaGlmdCAjIGFyZworICAgICBkc3RfYXJnPSRhcmcKKysgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKysgICAgY2FzZSAkZHN0X2FyZyBpbgorKyAgICAgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7CisrICAgIGVzYWMKKyAgIGRvbmUKKyBmaQorIAorQEAgLTE5NCwxMyArMjAyLDE3IEBAIGlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgIGV4aXQgMQorICAgZmkKKy0gICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorKyAgIyBJdCdzIE9LIHRvIGNhbGwgJ2luc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICAgZXhpdCAwCisgZmkKKyAKKyBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKy0gIHRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisrICBkb19leGl0PScoZXhpdCAkcmV0KTsgZXhpdCAkcmV0JworKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKysgIHRyYXAgInJldD0xMzA7ICRkb19leGl0IiAyCisrICB0cmFwICJyZXQ9MTQxOyAkZG9fZXhpdCIgMTMKKysgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQorIAorICAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KK0BAIC0yMjgsOSArMjQwLDkgQEAgZmkKKyAKKyBmb3Igc3JjCisgZG8KKy0gICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKysgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisgICBjYXNlICRzcmMgaW4KKy0gICAgLSopIHNyYz0uLyRzcmM7OworKyAgICAtKiB8IFs9XChcKSFdKSBzcmM9Li8kc3JjOzsKKyAgIGVzYWMKKyAKKyAgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorQEAgLTI1MiwxMiArMjY0LDcgQEAgZG8KKyAgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICAgZXhpdCAxCisgICAgIGZpCistCisgICAgIGRzdD0kZHN0X2FyZworLSAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCistICAgIGNhc2UgJGRzdCBpbgorLSAgICAgIC0qKSBkc3Q9Li8kZHN0OzsKKy0gICAgZXNhYworIAorICAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCitAQCAtMzQ3LDcgKzM1NCw3IEBAIGRvCisgCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisgCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgorIAkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKKy0JCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorKwkJICAgIyBvdGhlci13cml0YWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KKyAJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKyAJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKyAJCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgorQEAgLTM4NSw3ICszOTIsNyBAQCBkbworIAorICAgICAgIGNhc2UgJGRzdGRpciBpbgorIAkvKikgcHJlZml4PScvJzs7CistCS0qKSBwcmVmaXg9Jy4vJzs7CisrCVstPVwoXCkhXSopIHByZWZpeD0nLi8nOzsKKyAJKikgIHByZWZpeD0nJzs7CisgICAgICAgZXNhYworIAorQEAgLTQwMyw3ICs0MTAsNyBAQCBkbworIAorICAgICAgIGZvciBkCisgICAgICAgZG8KKy0JdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisrCXRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCisgCisgCXByZWZpeD0kcHJlZml4JGQKKyAJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KK0BAIC01MTUsNSArNTIyLDYgQEAgZG9uZQorICMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorICMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorICMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCistIyB0aW1lLXN0YW1wLWVuZDogIiQiCisrIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKysjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyAjIEVuZDoKK2RpZmYgLS1naXQgYS9jb25maWcvbHRtYWluLnNoIGIvY29uZmlnL2x0bWFpbi5zaAorb2xkIG1vZGUgMTAwNzU1CituZXcgbW9kZSAxMDA2NDQKK2luZGV4IDZkMDU2ZWMuLmEzNTZhY2EKKy0tLSBhL2NvbmZpZy9sdG1haW4uc2gKKysrKyBiL2NvbmZpZy9sdG1haW4uc2gKK0BAIC0xLDkgKzEsOSBAQAorLSMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisgCistIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sKSAyLjIuNAorKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC4yCisgIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCisrIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyAjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorQEAgLTMyLDUwICszMiw1NyBAQAorICMKKyAjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorICMKKy0jICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworLSMgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKy0jIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworLSMgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorLSMgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCistIyAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworLSMgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKy0jICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCistIyAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKy0jICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCistIyAtaCwgLS1oZWxwICAgICAgICAgICAgICAgcHJpbnQgc2hvcnQgb3IgbG9uZyBoZWxwIG1lc3NhZ2UKKysjICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisrIyAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisrIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworKyMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisrIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorKyMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworKyMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworKyMgICAgICAgLS1uby1xdWlldCwgLS1uby1zaWxlbnQKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCisrIyAgICAgICAtLW5vLXdhcm4gICAgICAgICAgICBkb24ndCBkaXNwbGF5IHdhcm5pbmcgbWVzc2FnZXMKKysjICAgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKKysjICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKysjICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisrIyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisrIyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCisgIworICMgTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICMKKy0jICAgICAgIGNsZWFuICAgICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CistIyAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorLSMgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCistIyAgICAgICBmaW5pc2ggICAgICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworLSMgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCistIyAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCistIyAgICAgICB1bmluc3RhbGwgICAgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKysjICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKysjICAgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKysjICAgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisrIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisrIyAgICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworKyMgICAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisrIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorICMKKy0jIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4KKysjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKKysjIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KKyAjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorICMKKyAjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorICMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorICMKKy0jICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKKy0jICAgICAgIHNoZWxsOgkJJFNIRUxMCistIyAgICAgICBjb21waWxlcjoJCSRMVENDCistIyAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworLSMgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKy0jICAgICAgICRwcm9nbmFtZToJCShHTlUgbGlidG9vbCkgMi4yLjQgRGViaWFuLTIuMi40LTB1YnVudHU0CistIyAgICAgICBhdXRvbWFrZToJCSRhdXRvbWFrZV92ZXJzaW9uCistIyAgICAgICBhdXRvY29uZjoJCSRhdXRvY29uZl92ZXJzaW9uCisrIyAgICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKKysjICAgICAgICAgc2hlbGw6CQkkU0hFTEwKKysjICAgICAgICAgY29tcGlsZXI6CQkkTFRDQworKyMgICAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworKyMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40LjIgRGViaWFuLTIuNC4yLTEuN3VidW50dTEKKysjICAgICAgICAgYXV0b21ha2U6CSRhdXRvbWFrZV92ZXJzaW9uCisrIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgorICMKKyAjIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KKysjIEdOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCisrIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KKyAKKy1QUk9HUkFNPWx0bWFpbi5zaAorK1BST0dSQU09bGlidG9vbAorIFBBQ0tBR0U9bGlidG9vbAorLVZFUlNJT049IjIuMi40IERlYmlhbi0yLjIuNC0wdWJ1bnR1NCIKKytWRVJTSU9OPSIyLjQuMiBEZWJpYW4tMi40LjItMS43dWJ1bnR1MSIKKyBUSU1FU1RBTVA9IiIKKy1wYWNrYWdlX3JldmlzaW9uPTEuMjk3NgorK3BhY2thZ2VfcmV2aXNpb249MS4zMzM3CisgCisgIyBCZSBCb3VybmUgY29tcGF0aWJsZQorIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorQEAgLTkxLDEwICs5OCwxNSBAQCBmaQorIEJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CisgRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KKytmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyt7CisrICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorKyQxCisrX0xURUNIT19FT0YnCisrfQorKworICMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCistIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KKy0jIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZAorLSMgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KKyBsdF91c2VyX2xvY2FsZT0KKyBsdF9zYWZlX2xvY2FsZT0KKyBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK0BAIC0xMDcsMjQgKzExOSwyOCBAQCBkbworIAkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKyAJZmkiCisgZG9uZQorK0xDX0FMTD1DCisrTEFOR1VBR0U9QworK2V4cG9ydCBMQU5HVUFHRSBMQ19BTEwKKyAKKyAkbHRfdW5zZXQgQ0RQQVRICisgCisgCisrIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisrIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKysjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorKyMgZnVuY3Rpb24uCisrcHJvZ3BhdGg9IiQwIgorIAorIAorIAorIDogJHtDUD0iY3AgLWYifQorLTogJHtFQ0hPPSJlY2hvIn0KKy06ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9CistOiAke0ZHUkVQPSIvYmluL2dyZXAgLUYifQorLTogJHtHUkVQPSIvYmluL2dyZXAifQorLTogJHtMTl9TPSJsbiAtcyJ9CisrdGVzdCAiJHtFQ0hPK3NldH0iID0gc2V0IHx8IEVDSE89JHthc19lY2hvLSdwcmludGYgJXNcbid9CisgOiAke01BS0U9Im1ha2UifQorIDogJHtNS0RJUj0ibWtkaXIifQorIDogJHtNVj0ibXYgLWYifQorIDogJHtSTT0icm0gLWYifQorLTogJHtTRUQ9Ii9iaW4vc2VkIn0KKyA6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKyA6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKyAKK0BAIC0xNDQsNiArMTYwLDI3IEBAIElGUz0iIAkkbHRfbmwiCisgZGlybmFtZT0icywvW14vXSokLCwiCisgYmFzZW5hbWU9InMsXi4qLywsIgorIAorKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKysjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKytmdW5jX2Rpcm5hbWUgKCkKKyt7CisrICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKysgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorKyAgICBlbHNlCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorKyAgICBmaQorK30gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKytmdW5jX2Jhc2VuYW1lICgpCisreworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKyt9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisgIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorICMgY2FsbDoKK0BAIC0xNTgsMzMgKzE5NSwxODMgQEAgYmFzZW5hbWU9InMsXi4qLywsIgorICMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKyB7CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKysgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKysgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisrICAgIGVsc2UKKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisrICAgIGZpCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorK30gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCisrZnVuY19zdHJpcG5hbWUgKCkKKyt7CisrICAgIGNhc2UgJHsyfSBpbgorKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KKytwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKKytwYXRoY2RyPSdzLF4vW14vXSosLCcKKytyZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCisrCQlzQC9cLi9AL0BnCisrCQl0IGRvdHNsCisrCQlzLC9cLiQsLywnCisrY29sbGFwc2VzbGFzaGVzPSdzQC9cezEsXH1AL0BnJworK2ZpbmFsc2xhc2g9J3MsLyokLC8sJworKworKyMgZnVuY19ub3JtYWxfYWJzcGF0aCBQQVRICisrIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKKysjIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZworKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KKysjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCisrZnVuY19ub3JtYWxfYWJzcGF0aCAoKQorK3sKKysgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKysgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQorKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQorKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisrICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCisrICAgICIiKQorKyAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKKysgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgICAgcmV0dXJuCisrICAgIDs7CisrICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQorKyAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOworKyAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisrICAgIC8vLyopCisrICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKysgICAgOzsKKysgICAgLy8qKQorKyAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJworKyAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKKysgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisrICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LworKyAgICA7OworKyAgICAvKikKKysgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisrICAgIDs7CisrICAgICopCisrICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCisrICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorKyAgICA7OworKyAgZXNhYworKyAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAorKyAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQorKyAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKysgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKysgICAgICAgIC1lICIkcmVtb3ZlZG90cGFydHMiIC1lICIkY29sbGFwc2VzbGFzaGVzIiAtZSAiJGZpbmFsc2xhc2giYAorKyAgd2hpbGUgOjsgZG8KKysgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KKysgICAgaWYgdGVzdCAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiID0gLyA7IHRoZW4KKysgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgorKyAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIgOyB0aGVuCisrICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisrICAgICAgZmkKKysgICAgICBicmVhaworKyAgICBmaQorKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKysgICAgICAgIC1lICIkcGF0aGNhciJgCisrICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKysgICAgICAgIC1lICIkcGF0aGNkciJgCisrICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKKysgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisrICAgICAgIiIpCisrICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCisrICAgICAgOzsKKysgICAgICAuLikKKysgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgorKyAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCisrICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorKyAgICAgIDs7CisrICAgICAgKikKKysgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCisrICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudAorKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgorKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgfQorIAorLSMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgorKyMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKKysjIGdlbmVyYXRlcyBhIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLCB3aXRoIGEgdHJhaWxpbmcKKysjIHNsYXNoIGlmIG5vbi1lbXB0eSwgc3VpdGFibGUgZm9yIGltbWVkaWF0ZWx5IGFwcGVuZGluZyBhIGZpbGVuYW1lCisrIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgorKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQorK3sKKysgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisrICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKKysgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisrICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysKKysgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCisrICB3aGlsZSA6OyBkbworKyAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisrICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCisrICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQorKyAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9CisrICAgICAgICBicmVhaworKyAgICAgICAgOzsKKysgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQorKyAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAorKyAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKysgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKysgICAgICAgIGZpCisrICAgICAgICBicmVhaworKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgorKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQorKyAgICAgICAgaWYgdGVzdCAieCRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgPSB4IDsgdGhlbgorKyAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKysgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisrICAgICAgICA7OworKyAgICBlc2FjCisrICBkb25lCisgCistIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCistIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKy0jIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorLSMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorLSMgZnVuY3Rpb24uCistcHJvZ3BhdGg9IiQwIgorKyAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgorKyAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKysgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgorKyAgaWYgdGVzdCAieCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiICE9IHggOyB0aGVuCisrICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KKysgIGZpCisrCisrICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCisrICAjIGVsc2UgcmVsYXRpdmUgcGF0aCBlbmRpbmcgd2l0aCBhIHNsYXNoOyBlaXRoZXIgd2F5LCB0YXJnZXQKKysgICMgZmlsZSBuYW1lIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZC4KKysgIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisrICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyIKKysgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICBmaQorK30KKyAKKyAjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKKy0jIEluIHRoZSB1bmxpa2VseSBldmVudCAkcHJvZ25hbWUgYmVnYW4gd2l0aCBhICctJywgaXQgd291bGQgcGxheSBoYXZvYyB3aXRoCistIyBmdW5jX2VjaG8gKGltYWdpbmUgcHJvZ25hbWU9LW4pLCBzbyB3ZSBwcmVwZW5kIC4vIGluIHRoYXQgY2FzZToKKyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCisgcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CistY2FzZSAkcHJvZ25hbWUgaW4KKy0gIC0qKSBwcm9nbmFtZT0uLyRwcm9nbmFtZSA7OworLWVzYWMKKyAKKyAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorIGNhc2UgJHByb2dwYXRoIGluCitAQCAtMTk2LDcgKzM4Myw3IEBAIGNhc2UgJHByb2dwYXRoIGluCisgICAgICA7OworICAgKikKKyAgICAgIHNhdmVfSUZTPSIkSUZTIgorLSAgICAgSUZTPToKKysgICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKK0BAIC0yMTUsNiArNDAyLDE1IEBAIHNlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisgIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworIAorKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCisrIyBzdHJpbmcgbGl0ZXJhbGx5LgorK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJworKworKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisrIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKysjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KKytsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisrCisgIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyAjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisgIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCitAQCAtMjQzLDcgKzQzOSw3IEBAIG9wdF93YXJuaW5nPToKKyAjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KKyBmdW5jX2VjaG8gKCkKKyB7CistICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICQqIgorKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgorIH0KKyAKKyAjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KK0BAIC0yNTgsMTggKzQ1NCwyNSBAQCBmdW5jX3ZlcmJvc2UgKCkKKyAgICAgOgorIH0KKyAKKysjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisrIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorK2Z1bmNfZWNob19hbGwgKCkKKyt7CisrICAgICRFQ0hPICIkKiIKKyt9CisrCisgIyBmdW5jX2Vycm9yIGFyZy4uLgorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KKyBmdW5jX2Vycm9yICgpCisgeworLSAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAiJHsxKyIkQCJ9IDE+JjIKKysgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0iJHsxKyIkQCJ9IDE+JjIKKyB9CisgCisgIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisgIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCisgZnVuY193YXJuaW5nICgpCisgeworLSAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogd2FybmluZzogIiR7MSsiJEAifSAxPiYyCisrICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfXdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorIAorICAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgICA6CitAQCAtMzI2LDkgKzUyOSw5IEBAIGZ1bmNfbWtkaXJfcCAoKQorICAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisgCisgICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKy0gICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiWCRteV9kaXJlY3RvcnlfcGF0aCIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorKyAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgICAgIGRvbmUKKy0gICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIlgkbXlfZGlyX2xpc3QiIHwgJFhzZWQgLWUgJ3MsOiokLCwnYAorKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiJG15X2Rpcl9saXN0IiB8ICRTRUQgJ3MsOiokLCwnYAorIAorICAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCitAQCAtMzc4LDcgKzU4MSw3IEBAIGZ1bmNfbWt0ZW1wZGlyICgpCisgICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKKyAgICAgZmkKKyAKKy0gICAgJEVDSE8gIlgkbXlfdG1wZGlyIiB8ICRYc2VkCisrICAgICRFQ0hPICIkbXlfdG1wZGlyIgorIH0KKyAKKyAKK0BAIC0zOTIsNyArNTk1LDcgQEAgZnVuY19xdW90ZV9mb3JfZXZhbCAoKQorIHsKKyAgICAgY2FzZSAkMSBpbgorICAgICAgICpbXFxcYFwiXCRdKikKKy0JZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICJYJDEiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworKwlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworICAgICAgICopCisgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CisgICAgIGVzYWMKK0BAIC00MTksNyArNjIyLDcgQEAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCisgeworICAgICBjYXNlICQxIGluCisgICAgICAgKltcXFxgXCJdKikKKy0JbXlfYXJnPWAkRUNITyAiWCQxIiB8ICRYc2VkIFwKKysJbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisgCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CisgICAgICAgKikKKyAgICAgICAgIG15X2FyZz0iJDEiIDs7CitAQCAtNDg4LDE1ICs2OTEsMzkgQEAgZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCisgICAgIGZpCisgfQorIAorLQorLQorKyMgZnVuY190cl9zaAorKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisrIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCisrIyBub3QgaW4gdGhlIHNldCBhLXpBLVowLTlfIGFyZSByZXBsYWNlZCB3aXRoICdfJy4gRnVydGhlciwKKysjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorK2Z1bmNfdHJfc2ggKCkKKyt7CisrICBjYXNlICQxIGluCisrICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisrICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAncy9eXChbMC05XVwpL19cMS87IHMvW15hLXpBLVowLTlfXS9fL2cnYAorKyAgICA7OworKyAgKiApCisrICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCisrICAgIDs7CisrICBlc2FjCisrfQorIAorIAorICMgZnVuY192ZXJzaW9uCisgIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisgZnVuY192ZXJzaW9uICgpCisgeworLSAgICAkU0VEIC1uICcvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworKyAgICAkb3B0X2RlYnVnCisrCisrICAgICRTRUQgLW4gJy8oQykvIWIgZ28KKysJOm1vcmUKKysJL1wuLyF7CisrCSAgTgorKwkgIHMvXG4jIC8gLworKwkgIGIgbW9yZQorKwl9CisrCTpnbworKwkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworICAgICAgICAgcy9eIyAvLworIAlzL14jICokLy8KKyAgICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KK0BAIC01MDksMjIgKzczNiwyOCBAQCBmdW5jX3ZlcnNpb24gKCkKKyAjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKyBmdW5jX3VzYWdlICgpCisgeworLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyAtaC8geworKyAgICAkb3B0X2RlYnVnCisrCisrICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgICBzL14jIC8vCisgCXMvXiMgKiQvLworIAlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisgCXAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorLSAgICAkRUNITworKyAgICBlY2hvCisgICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgIGV4aXQgJD8KKyB9CisgCistIyBmdW5jX2hlbHAKKy0jIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorKyMgZnVuY19oZWxwIFtOT0VYSVRdCisrIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKKysjIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCisgZnVuY19oZWxwICgpCisgeworKyAgICAkb3B0X2RlYnVnCisrCisgICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisrCTpwcmludAorICAgICAgICAgcy9eIyAvLworIAlzL14jICokLy8KKyAJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorQEAgLTUzNCwxMSArNzY3LDE4IEBAIGZ1bmNfaGVscCAoKQorIAlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKyAJcypcJExEKiciJExEIicqCisgCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworLQlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKy0Jcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisrCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYCgke0FVVE9NQUtFLWF1dG9tYWtlfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoJHtBVVRPQ09ORi1hdXRvY29uZn0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKyAJcAorLSAgICAgfScgPCAiJHByb2dwYXRoIgorLSAgICBleGl0ICQ/CisrCWQKKysgICAgIH0KKysgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKKysgICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAorKyAgICAgJyA8ICIkcHJvZ3BhdGgiCisrICAgIHJldD0kPworKyAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKysgICAgICBleGl0ICRyZXQKKysgICAgZmkKKyB9CisgCisgIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKK0BAIC01NDYsNjMgKzc4NiwxMDYgQEAgZnVuY19oZWxwICgpCisgIyBleGl0X2NtZC4KKyBmdW5jX21pc3NpbmdfYXJnICgpCisgeworLSAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMSIKKysgICAgJG9wdF9kZWJ1ZworKworKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCisgICAgIGV4aXRfY21kPWV4aXQKKyB9CisgCistZXhpdF9jbWQ9OgorIAorKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKKysjIFNldCBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcgc2hlbGwKKysjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKKyt7CisrICAgIG15X3NlZF9zaG9ydF9vcHQ9JzFzL15cKC4uXCkuKiQvXDEvO3EnCisrICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworIAorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9vcHQiYAorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAorK30gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbG9uZ29wdAorKyMgU2V0IGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9sb25nX29wdF9hcmcgc2hlbGwKKysjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCisrZnVuY19zcGxpdF9sb25nX29wdCAoKQorK3sKKysgICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCisrICAgIG15X3NlZF9sb25nX2FyZz0nMXMvXi0tW149XSo9Ly8nCisrCisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorK30gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworK2V4aXRfY21kPToKKyAKKyAKKyAKKy0jIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJEVDSE8uCistaWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorLSAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCistICBzaGlmdAorLWVsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKy0gICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKy0gIDoKKy1lbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorLSAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQorLSAgOgorLWVsc2UKKy0gICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgJEVDSE8gd2lsbCB3b3JrLgorLSAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CistZmkKKyAKKy1pZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKy0gIHNoaWZ0CistICBjYXQgPDxFT0YKKy0kKgorLUVPRgorLSAgZXhpdCAkRVhJVF9TVUNDRVNTCistZmkKKyAKKyBtYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCisgbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisgCisgIyBHbG9iYWwgdmFyaWFibGVzLgorLSMgJG1vZGUgaXMgdW5zZXQKKyBub25vcHQ9CistZXhlY3V0ZV9kbGZpbGVzPQorIHByZXNlcnZlX2FyZ3M9CisgbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorIG8ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKKyBleHRyYWN0ZWRfYXJjaGl2ZXM9CisgZXh0cmFjdGVkX3NlcmlhbD0wCisgCistb3B0X2RyeV9ydW49ZmFsc2UKKy1vcHRfZHVwbGljYXRlX2RlcHM9ZmFsc2UKKy1vcHRfc2lsZW50PWZhbHNlCistb3B0X2RlYnVnPToKKy0KKyAjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyAjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyAjIGxlZnQgb3ZlciBieSBzaGVsbHMuCisgZXhlY19jbWQ9CisgCisrIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKysjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKytmdW5jX2FwcGVuZCAoKQorK3sKKysgICAgZXZhbCAiJHsxfT1cJCR7MX1cJHsyfSIKKyt9ICMgZnVuY19hcHBlbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrIyBmdW5jX2FwcGVuZF9xdW90ZWQgdmFyIHZhbHVlCisrIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKKysjIGJ5IGEgc3BhY2UuCisrZnVuY19hcHBlbmRfcXVvdGVkICgpCisreworKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorKyAgICBldmFsICIkezF9PVwkJHsxfVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrfSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCisrZnVuY19hcml0aCAoKQorK3sKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiR7QH0iYAorK30gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19sZW4gc3RyaW5nCisrIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorK2Z1bmNfbGVuICgpCisreworKyAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiR7MX0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKyt9ICMgZnVuY19sZW4gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2xvMm8gb2JqZWN0CisrZnVuY19sbzJvICgpCisreworKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCisrfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorK2Z1bmNfeGZvcm0gKCkKKyt7CisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorK30gIyBmdW5jX3hmb3JtIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworICMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyAjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorQEAgLTYzNiwxNiArOTE5LDE2IEBAIGZ1bmNfY29uZmlnICgpCisgIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCisgZnVuY19mZWF0dXJlcyAoKQorIHsKKy0gICAgJEVDSE8gImhvc3Q6ICRob3N0IgorKyAgICBlY2hvICJob3N0OiAkaG9zdCIKKyAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKy0gICAgICAkRUNITyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisrICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgIGVsc2UKKy0gICAgICAkRUNITyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorKyAgICAgIGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorLSAgICAgICRFQ0hPICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKysgICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICAgZWxzZQorLSAgICAgICRFQ0hPICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisrICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgICBmaQorIAorICAgICBleGl0ICQ/CitAQCAtNjkyLDEzMyArOTc1LDYgQEAgZnVuY19lbmFibGVfdGFnICgpCisgICBlc2FjCisgfQorIAorLSMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluCistIyB0aGUgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYGxpYnRvb2wgLS12ZXJzaW9uJyBoYXBwZW4gcXVpY2tseS4KKy17CistCistICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKy0gIGNhc2UgJDEgaW4KKy0gIGNsZWFufGNsZWF8Y2xlfGNsKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGxpbmt8bGlufGxpfGwpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBlc2FjCistCistICAjIFBhcnNlIG5vbi1tb2RlIHNwZWNpZmljIGFyZ3VtZW50czoKKy0gIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKy0gICAgb3B0PSIkMSIKKy0gICAgc2hpZnQKKy0KKy0gICAgY2FzZSAkb3B0IGluCistICAgICAgLS1jb25maWcpCQlmdW5jX2NvbmZpZwkJCQkJOzsKKy0KKy0gICAgICAtLWRlYnVnKQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKy0JCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCistCQkJb3B0X2RlYnVnPSdzZXQgLXgnCistCQkJJG9wdF9kZWJ1ZworLQkJCTs7CistCistICAgICAgLWRsb3BlbikJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworLQkJCWV4ZWN1dGVfZGxmaWxlcz0iJGV4ZWN1dGVfZGxmaWxlcyAkMSIKKy0JCQlzaGlmdAorLQkJCTs7CistCistICAgICAgLS1kcnktcnVuIHwgLW4pCW9wdF9kcnlfcnVuPToJCQkJCTs7CistICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKy0gICAgICAtLWZpbmlzaCkJCW1vZGU9ImZpbmlzaCIJCQkJCTs7CistCistICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJY2FzZSAkMSBpbgorLQkJCSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKy0JCQkgIGNsZWFuKQk7OworLQkJCSAgY29tcGlsZSkJOzsKKy0JCQkgIGV4ZWN1dGUpCTs7CistCQkJICBmaW5pc2gpCTs7CistCQkJICBpbnN0YWxsKQk7OworLQkJCSAgbGluaykJCTs7CistCQkJICByZWxpbmspCTs7CistCQkJICB1bmluc3RhbGwpCTs7CistCistCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKy0JCQkgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCistCQkJICAgICBleGl0X2NtZD1leGl0CistCQkJICAgICBicmVhaworLQkJCSAgICAgOzsKKy0JCSAgICAgICAgZXNhYworLQorLQkJCW1vZGU9IiQxIgorLQkJCXNoaWZ0CistCQkJOzsKKy0KKy0gICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorLQkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CistCistICAgICAgLS1xdWlldHwtLXNpbGVudCkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKy0JCQlvcHRfc2lsZW50PToKKy0JCQk7OworLQorLSAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCistCQkJb3B0X3NpbGVudD1mYWxzZQorLQkJCTs7CistCistICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0ICQxIgorLQkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorLQkJCXNoaWZ0CistCQkJOzsKKy0KKy0gICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorLSAgICAgIC1kbG9wZW49KnwtLW1vZGU9KnwtLXRhZz0qKQorLQkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorLQkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQorLQkJCXNoaWZ0CistCQkJOzsKKy0KKy0gICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCQk7OworLSAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CistICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJCTs7CistCistICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKy0KKy0gICAgICAqKQkJbm9ub3B0PSIkb3B0IgorLQkJCWJyZWFrCistCQkJOzsKKy0gICAgZXNhYworLSAgZG9uZQorLQorLQorLSAgY2FzZSAkaG9zdCBpbgorLSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiopCistICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKy0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKy0gICAgICA7OworLSAgICAqKQorLSAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9kdXBsaWNhdGVfZGVwcworLSAgICAgIDs7CistICBlc2FjCistCistICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKy0gICMgYW55dGhpbmcgd2FzIHdyb25nLgorLSAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKy19CistCisgIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyAjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisgIyByZWxlYXNlIG9mIGxpYnRvb2wuCitAQCAtODU1LDQ2ICsxMDExLDIyOCBAQCBfTFRfRU9GCisgfQorIAorIAorLSMjIC0tLS0tLS0tLS0tICMjCistIyMgICAgTWFpbi4gICAgIyMKKy0jIyAtLS0tLS0tLS0tLSAjIworKyMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorK2Nhc2UgJDEgaW4KKytjbGVhbnxjbGVhfGNsZXxjbCkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2ZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisraW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytsaW5rfGxpbnxsaXxsKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisrICA7OworK3VuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZXNhYworIAorLSRvcHRfaGVscCB8fCB7CistICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CistICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyAKKy0gIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorLSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCistICBmaQorIAorLSAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCisrIyBPcHRpb24gZGVmYXVsdHM6Cisrb3B0X2RlYnVnPToKKytvcHRfZHJ5X3J1bj1mYWxzZQorK29wdF9jb25maWc9ZmFsc2UKKytvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKKytvcHRfZmVhdHVyZXM9ZmFsc2UKKytvcHRfZmluaXNoPWZhbHNlCisrb3B0X2hlbHA9ZmFsc2UKKytvcHRfaGVscF9hbGw9ZmFsc2UKKytvcHRfc2lsZW50PToKKytvcHRfd2FybmluZz06Cisrb3B0X3ZlcmJvc2U9OgorK29wdF9zaWxlbnQ9ZmFsc2UKKytvcHRfdmVyYm9zZT1mYWxzZQorIAorIAorLSAgIyBEYXJ3aW4gc3Vja3MKKy0gIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisrIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlCisrIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCisreworKyAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZworKyAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKysgICAgb3B0PSIkMSIKKysgICAgc2hpZnQKKysgICAgY2FzZSAkb3B0IGluCisrICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCisrCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorKwkJCSRvcHRfZGVidWcKKysJCQk7OworKyAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKysJCQlvcHRfZHJ5X3J1bj06CisrCQkJOzsKKysgICAgICAtLWNvbmZpZykKKysJCQlvcHRfY29uZmlnPToKKytmdW5jX2NvbmZpZworKwkJCTs7CisrICAgICAgLS1kbG9wZW58LWRsb3BlbikKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorK30kb3B0YXJnIgorKwkJCXNoaWZ0CisrCQkJOzsKKysgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorKwkJCW9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06CisrCQkJOzsKKysgICAgICAtLWZlYXR1cmVzKQorKwkJCW9wdF9mZWF0dXJlcz06CisrZnVuY19mZWF0dXJlcworKwkJCTs7CisrICAgICAgLS1maW5pc2gpCisrCQkJb3B0X2ZpbmlzaD06Cisrc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorKwkJCTs7CisrICAgICAgLS1oZWxwKQorKwkJCW9wdF9oZWxwPToKKysJCQk7OworKyAgICAgIC0taGVscC1hbGwpCisrCQkJb3B0X2hlbHBfYWxsPToKKytvcHRfaGVscD0nOiBoZWxwLWFsbCcKKysJCQk7OworKyAgICAgIC0tbW9kZSkKKysJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgorK2Nhc2UgJG9wdGFyZyBpbgorKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKysgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisrCisrICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKysgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisrICAgICBleGl0X2NtZD1leGl0CisrICAgICBicmVhaworKyAgICAgOzsKKytlc2FjCisrCQkJc2hpZnQKKysJCQk7OworKyAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisrCQkJb3B0X3NpbGVudD1mYWxzZQorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorKwkJCTs7CisrICAgICAgLS1uby13YXJuaW5nfC0tbm8td2FybikKKysJCQlvcHRfd2FybmluZz1mYWxzZQorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorKwkJCTs7CisrICAgICAgLS1uby12ZXJib3NlKQorKwkJCW9wdF92ZXJib3NlPWZhbHNlCisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrCQkJOzsKKysgICAgICAtLXNpbGVudHwtLXF1aWV0KQorKwkJCW9wdF9zaWxlbnQ9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorKyAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKysJCQk7OworKyAgICAgIC0tdmVyYm9zZXwtdikKKysJCQlvcHRfdmVyYm9zZT06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrb3B0X3NpbGVudD1mYWxzZQorKwkJCTs7CisrICAgICAgLS10YWcpCisrCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfdGFnPSIkb3B0YXJnIgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCisrZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgorKwkJCXNoaWZ0CisrCQkJOzsKKyAKKysgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7CisrICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7CisrICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKKyAKKy0gICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCistICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorLSAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCistICAgICRFQ0hPICIkaGVscCIgMT4mMgorLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKysgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorKyAgICAgIC0tKj0qKQorKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCisrCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KKysJCQlzaGlmdAorKwkJCTs7CisrCisrICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKysgICAgICAtXD8qfC1oKnwtbip8LXYqKQorKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrCQkJc2hpZnQKKysJCQk7OworKworKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisrICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKysgICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKysgICAgZXNhYworKyAgZG9uZQorKworKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorKworKyAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKysgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorKyAgICBub25vcHQ9IiRvcHQiCisrICAgIHNoaWZ0CisgICBmaQorIAorLSAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorLSAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKy0gIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisrICAjIHByZXNlcnZlIC0tZGVidWcKKysgIHRlc3QgIiRvcHRfZGVidWciID0gOiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKysKKysgIGNhc2UgJGhvc3QgaW4KKysgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKKysgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorKyAgICAgIDs7CisrICAgICopCisrICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisrICAgICAgOzsKKysgIGVzYWMKKysKKysgICRvcHRfaGVscCB8fCB7CisrICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKysgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisrCisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKysgICAgZmkKKysKKysgICAgIyBEYXJ3aW4gc3Vja3MKKysgICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKysKKysgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKysgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgIiRvcHRfbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorKyAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKysgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKysgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKysgICAgZmkKKysKKysgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKysgIH0KKysKKysKKysgICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQKKysgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCisgfQorIAorIAorKworKworKyMjIC0tLS0tLS0tLS0tICMjCisrIyMgICAgTWFpbi4gICAgIyMKKysjIyAtLS0tLS0tLS0tLSAjIworKworICMgZnVuY19sYWxpYl9wIGZpbGUKKyAjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisgIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorICMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCisgZnVuY19sYWxpYl9wICgpCisgeworLSAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgXAorLSAgICAgIHwgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCisrICAgIHRlc3QgLWYgIiQxIiAmJgorKyAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisrICAgICAgICB8ICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQorIH0KKyAKKyAjIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQorQEAgLTkwNyw3ICsxMjQ1LDcgQEAgZnVuY19sYWxpYl9wICgpCisgZnVuY19sYWxpYl91bnNhZmVfcCAoKQorIHsKKyAgICAgbGFsaWJfcD1ubworLSAgICBpZiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisrICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisgCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorIAlkbworIAkgICAgcmVhZCBsYWxpYl9wX2xpbmUKK0BAIC05NDksMTIgKzEyODcsOSBAQCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKKyAjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKKyB7CistICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIiCistICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiOyB0aGVuCistCWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKy0JZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCWZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKy0gICAgZmkKKysgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorIH0KKyAKKyAjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorQEAgLTEwMDAsNiArMTMzNSwzNyBAQCBmdW5jX3NvdXJjZSAoKQorIH0KKyAKKyAKKysjIGZ1bmNfcmVzb2x2ZV9zeXNyb290IFBBVEgKKysjIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bworKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrZnVuY19yZXNvbHZlX3N5c3Jvb3QgKCkKKyt7CisrICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKysgIGNhc2UgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCBpbgorKyAgPSopCisrICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKysgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICA7OworKyAgZXNhYworK30KKysKKysjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKysjIElmIFBBVEggYmVnaW5zIHdpdGggdGhlIHN5c3Jvb3QsIHJlcGxhY2UgaXQgd2l0aCA9IGFuZAorKyMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KKytmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQorK3sKKysgIGNhc2UgIiRsdF9zeXNyb290OiQxIiBpbgorKyAgPyo6IiRsdF9zeXNyb290IiopCisrICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Ij0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKyAgICA7OworKyAgKikKKysgICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KKysgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCisrICAgIDs7CisrICBlc2FjCisrfQorKworICMgZnVuY19pbmZlcl90YWcgYXJnCisgIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisgIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KK0BAIC0xMDEyLDEzICsxMzc4LDE1IEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICAgQ0NfcXVvdGVkPQorICAgICAgIGZvciBhcmcgaW4gJENDOyBkbworLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKyAgICAgICBkb25lCisrICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorKyAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorICAgICAgIGNhc2UgJEAgaW4KKyAgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorICAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorLSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKSA7OworKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKysgICAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopIDs7CisgICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAgKikKK0BAIC0xMDI5LDExICsxMzk3LDEzIEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgCSAgICBDQ19xdW90ZWQ9CisgCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKyAJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorLQkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQkgICAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorIAkgICAgZG9uZQorKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorKwkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCisgCSAgICBjYXNlICIkQCAiIGluCistCSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKQorKwkgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAorKwkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQorIAkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworIAkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgorIAkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorQEAgLTEwNTgsNDMgKzE0MjgsNTIzIEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgfQorIAorIAorLQorLSMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorLSMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCistIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KKy1mdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCisrCisrIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisrIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKysjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgorK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKKyt7CisrICAgIHdyaXRlX2xpYm9iaj0kezF9CisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisrICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworKyAgICBlbHNlCisrICAgICAgd3JpdGVfbG9iaj1ub25lCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKysgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKysgICAgZWxzZQorKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisrICAgIGZpCisrCisrICAgICRvcHRfZHJ5X3J1biB8fCB7CisrICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisrIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisrIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisrIworKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorKworKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KKytwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisrCisrIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAorK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKysKKytFT0YKKysgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisrICAgIH0KKyt9CisrCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsCisrIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCisrIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorKyMgaW4gJGJ1aWxkJ3MgJFBBVEguCisrIworKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQsIGFuZCB3aWxsCisrIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCisrZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCisrICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisrICAgICMgY29tbWFuZCBpcyBub3QgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorKyAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgorKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXB9IjsgdGhlbgorKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8CisrICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisrICAgIGVsc2UKKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKysgICAgZmkKKysgIGZpCisrfQorKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKKysjICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKKysjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKysjICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgorKyMKKysjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdC4KKysjIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcworKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorK2Z1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCisrICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIG9sZElGUz0kSUZTCisrICAgIElGUz06CisrICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisrICAgICAgSUZTPSRvbGRJRlMKKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgorKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIgOyB0aGVuCisrICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCisrICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIElGUz0kb2xkSUZTCisrICBmaQorK30KKysjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgorKworKworKyMgZnVuY19jeWdwYXRoIEFSR1MuLi4KKysjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKysjIHdoZW4gKDEpICRidWlsZCBpcyAqbml4IGFuZCBDeWd3aW4gaXMgaG9zdGVkIHZpYSBhIHdpbmUgZW52aXJvbm1lbnQ7IG9yICgyKQorKyMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCisrIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorKyMgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbiB3MzIgZm9ybWF0LCBhcyBwcmV2aW91c2x5IGNvbnZlcnRlZAorKyMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKKysjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorKyMgQ3lnd2luIGZvcm1hdCkuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yLgorKyMKKysjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKysjIGJlIGNvbnZlcnRlZC4KKysjCisrIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorKyMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCisrZnVuY19jeWdwYXRoICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAorKyAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKysgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKysgICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorKyAgICBmaQorKyAgZWxzZQorKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorKyAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogXGAkTFRfQ1lHUEFUSCciCisrICBmaQorK30KKysjZW5kOiBmdW5jX2N5Z3BhdGgKKysKKysKKysjIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgb3IgcGF0aCBBUkcgZnJvbSBNU1lTIGZvcm1hdCB0byB3MzIgZm9ybWF0LiAgUmV0dXJuCisrIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgorK2Z1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisrICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisrICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyt9CisrI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgorKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorKyMgZm9ybWF0IGluIEFSRzIuIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUgKHJlc2V0dGluZworKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgorK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKysgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgorKyAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKysgICAgIyBGYWxsYmFjazoKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAorKyMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorKyMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZworKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KKytmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKysgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCisrICAgIGZ1bmNfZXJyb3IgIiAgXGAkMyciCisrICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorKyAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKKysgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorKyAgICBpZiB0ZXN0ICJ4JDEiICE9ICJ4JDIiOyB0aGVuCisrICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCisrICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorKyAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCisrICAgIGVsc2UKKysgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzIgorKyAgICBmaQorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworKyMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKKysjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KKytmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBjYXNlICQ0IGluCisrICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICA7OworKyAgZXNhYworKyAgY2FzZSAkNCBpbgorKyAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgorKyAgICA7OworKyAgZXNhYworK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKKysKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIGludm9rZWQgdmlhIGAkdG9faG9zdF9maWxlX2NtZCBBUkcnCisrIworKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKysjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorKworKworKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisrIyBDb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY190b19ob3N0X2ZpbGUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCisrfQorKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCisrCisrCisrIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorKyMgY29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHRvb2xjaGFpbiBmb3JtYXQuIFJldHVybgorKyMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKKysjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorK2Z1bmNfdG9fdG9vbF9maWxlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgY2FzZSAsJDIsIGluCisrICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQorKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQorKyAgICAgIDs7CisrICAgICopCisrICAgICAgJHRvX3Rvb2xfZmlsZV9jbWQgIiQxIgorKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CisrICAgICAgOzsKKysgIGVzYWMKKyt9CisrIyBlbmQgZnVuY190b190b29sX2ZpbGUKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCisrIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQorK3sKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisrIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQorKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9YGN5Z3BhdGggLW0gIiQxImAKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisrIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisrIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKysgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAorKyMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKysgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKworKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X3BhdGhfY21kIEFSRycKKysjCisrIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorKyMKKysjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCisrIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKysjIGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpIG9uIG91dHB1dC4KKysjCisrIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorKyMgICBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbiAgICA6IGZ1bmNfY29udmVydF9maWxlX1hfdG9fWSAoKQorKyMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQorKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKysjIHNhbWUuICBJZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIG5ldyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zLAorKyMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysjIHdpbGwgYnJlYWsuCisrCisrCisrIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyMgRW5zdXJlcyB0aGF0IGZ1bmN0aW9uICJwb2ludGVyIiB2YXJpYWJsZSAkdG9faG9zdF9wYXRoX2NtZCBpcyBzZXQgdG8gdGhlCisrIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgorK3RvX2hvc3RfcGF0aF9jbWQ9CisrZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KKysgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorKyAgICB0b19ob3N0X3BhdGhfY21kPSJmdW5jX2NvbnZlcnRfcGF0aF8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0iCisrICBmaQorK30KKysKKysKKysjIGZ1bmNfdG9faG9zdF9wYXRoIEFSRworKyMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX3RvX2hvc3RfcGF0aCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCisrfQorKyMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRworKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX25vb3AgKCkKKyt7CisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKysjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCisrICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CisrICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQorIHsKKy0gICAgd3JpdGVfbGlib2JqPSR7MX0KKy0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKy0gICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCistICAgIGVsc2UKKy0gICAgICB3cml0ZV9sb2JqPW5vbmUKKy0gICAgZmkKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKKyAKKy0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorLSAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworLSAgICBlbHNlCistICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKKy0gICAgZmkKKyAKKy0gICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0gICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKy0jICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKy0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKy0jCistIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCistIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKysjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKyAKKy0jIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCistcGljX29iamVjdD0kd3JpdGVfbG9iagorIAorLSMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKKy1ub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKysjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKyAKKy1FT0YKKy0gICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCistICAgIH0KKysKKysjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCisrIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisrICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKysgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorKyAgZmkKKyB9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorKworIAorICMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCisgZnVuY19tb2RlX2NvbXBpbGUgKCkKK0BAIC0xMTM2LDEyICsxOTg2LDEyIEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgOzsKKyAKKyAJLXBpZSB8IC1mcGllIHwgLWZQSUUpCistICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKysgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKKyAJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKy0JICBsYXRlcj0iJGxhdGVyICRhcmciCisrCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKK0BAIC0xMTYyLDE1ICsyMDEyLDE0IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisgCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKyAJICAgIElGUz0iJHNhdmVfaWZzIgorLQkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgorIAkgIGRvbmUKKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorIAkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAorIAkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorLQkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKysJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCitAQCAtMTE4Niw4ICsyMDM1LDcgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisgCisgICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKy0gICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgorICAgICBkb25lICMgZm9yIGFyZworIAorICAgICBjYXNlICRhcmdfbW9kZSBpbgorQEAgLTEyMTIsNyArMjA2MCw3IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCistICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLm9iaiB8ICouc3gpCisrICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLmdvIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICAgbGlib2JqPSRmdW5jX3hmb3JtX3Jlc3VsdAorICAgICAgIDs7CitAQCAtMTI3NSw3ICsyMTIzLDcgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAKKyAgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgICBjYXNlICRob3N0X29zIGluCistICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgIDs7CisgICAgIGVzYWMKK0BAIC0xMjg3LDcgKzIxMzUsNyBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQorICAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorLSAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJyAtZSAncyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisrICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICAgZWxzZQorICAgICAgIG91dHB1dF9vYmo9CitAQCAtMTMxOCwxNyArMjE2NiwxNiBAQCBjb21waWxlci4iCisgCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICAgZmkKKy0gICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiIKKysgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJG91dHB1dF9vYmoiCisgICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgIGZpCisgCisgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKy0gICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJGxvY2tmaWxlIgorKyAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgorICAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorIAorLSAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKy0gICAgICBldmFsIHNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiCistICAgIGZpCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyAKK0BAIC0xMzQ4LDcgKzIxOTUsNyBAQCBjb21waWxlci4iCisgCisgICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisgCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkbG9iaiIKKysJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgIGZpCisgCisgICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorQEAgLTEzOTUsMTEgKzIyNDIsMTEgQEAgY29tcGlsZXIuIgorIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICAgZmkKKyAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKKyAgICAgICBmaQorIAorICAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorLSAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKysgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisgCitAQCAtMTQ0NCwxMyArMjI5MSwxMyBAQCBjb21waWxlci4iCisgfQorIAorICRvcHRfaGVscCB8fCB7CistdGVzdCAiJG1vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KKysgIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorIH0KKyAKKyBmdW5jX21vZGVfaGVscCAoKQorIHsKKyAgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCistICAgIGNhc2UgJG1vZGUgaW4KKysgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICAiIikKKyAgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorQEAgLTE0ODEsMTAgKzIzMjgsMTEgQEAgVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisgCisgICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworLSAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKy0gIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZGluZyBub24tUElDIG9iamVjdHMgb25seQorKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKysgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorIAorIENPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCisgZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KK0BAIC0xNTM3LDcgKzIzODUsNyBAQCBlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKyAKKyBUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKyAKKy0gIC1pbnN0LXByZWZpeCBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCisrICAtaW5zdC1wcmVmaXgtZGlyIFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKyAKKyBUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorIEJTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorQEAgLTE1NTcsNiArMjQwNSw4IEBAIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorIAorICAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKysgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCisrICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgUEFUSCBzZXR0aW5nIGF0IHJ1bnRpbWUpCisgICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQorQEAgLTE1ODUsNiArMjQzNSwxMSBAQCBUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKyAgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCisgICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKysgIC1XYyxGTEFHCisrICAtWGNvbXBpbGVyIEZMQUcgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorKyAgLVdsLEZMQUcKKysgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorKyAgLVhDQ2xpbmtlciBGTEFHICAgcGFzcyBsaW5rLXNwZWNpZmljIEZMQUcgdG8gdGhlIGNvbXBpbGVyIGRyaXZlciAoQ0MpCisgCisgQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKyAKK0BAIC0xNjE4LDE4ICsyNDczLDQ0IEBAIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgIDs7CisgCisgICAgICAgKikKKy0gICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgICA7OworICAgICBlc2FjCisgCistICAgICRFQ0hPCisrICAgIGVjaG8KKyAgICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKKy0KKy0gICAgZXhpdCAkPworIH0KKyAKKy0gICMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQorLSAgJG9wdF9oZWxwICYmIGZ1bmNfbW9kZV9oZWxwCisrIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CisraWYgJG9wdF9oZWxwOyB0aGVuCisrICBpZiB0ZXN0ICIkb3B0X2hlbHAiID0gOjsgdGhlbgorKyAgICBmdW5jX21vZGVfaGVscAorKyAgZWxzZQorKyAgICB7CisrICAgICAgZnVuY19oZWxwIG5vZXhpdAorKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisrCWZ1bmNfbW9kZV9oZWxwCisrICAgICAgZG9uZQorKyAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworKyAgICB7CisrICAgICAgZnVuY19oZWxwIG5vZXhpdAorKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisrCWVjaG8KKysJZnVuY19tb2RlX2hlbHAKKysgICAgICBkb25lCisrICAgIH0gfAorKyAgICBzZWQgJzFkCisrICAgICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQveworKwlICisrCWQKKysgICAgICB9CisrICAgICAgJHgKKysgICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAorKyAgICAgIC9tb3JlIGRldGFpbGVkIC4qTU9ERS9kCisrICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKysgIGZpCisrICBleGl0ICQ/CisrZmkKKyAKKyAKKyAjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorQEAgLTE2NDIsMTMgKzI1MjMsMTYgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorIAorICAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorLSAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbworKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KKyAgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorIAl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisgCisgICAgICAgZGlyPQorICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAqLmxhKQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisrCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKworIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCitAQCAtMTY3MCw3ICsyNTU0LDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAKKyAJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCistCSAgZGlyPSIkZGlyLyRvYmpkaXIiCisrCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKKyAJZWxzZQorIAkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKK0BAIC0xNzExLDcgKzI1OTUsNyBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICBmb3IgZmlsZQorICAgICBkbworICAgICAgIGNhc2UgJGZpbGUgaW4KKy0gICAgICAtKikgOzsKKysgICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKKyAgICAgICAqKQorIAkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisgCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KK0BAIC0xNzI3LDggKzI2MTEsNyBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorIAk7OworICAgICAgIGVzYWMKKyAgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmaWxlIgorLSAgICAgIGFyZ3M9IiRhcmdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCisgICAgIGRvbmUKKyAKKyAgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KK0BAIC0xNzUzLDI5ICsyNjM2LDY2IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKy0JJEVDSE8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKysJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgIGZpCisgICAgICAgJEVDSE8gIiRjbWQkYXJncyIKKyAgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgZmkKKyB9CisgCistdGVzdCAiJG1vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKyt0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKyAKKyAKKyAjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCisgZnVuY19tb2RlX2ZpbmlzaCAoKQorIHsKKyAgICAgJG9wdF9kZWJ1ZworLSAgICBsaWJkaXJzPSIkbm9ub3B0IgorKyAgICBsaWJzPQorKyAgICBsaWJkaXJzPQorICAgICBhZG1pbmNtZHM9CisgCistICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCistICAgICAgZm9yIGRpcgorLSAgICAgIGRvCistCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCistICAgICAgZG9uZQorKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KKysgICAgZG8KKysgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKKyAKKysgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisrCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCisrCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisrCWVsc2UKKysJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorKwlmaQorKworKyAgICAgIGVsc2UKKysJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorKyAgICAgIGZpCisrICAgIGRvbmUKKysKKysgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCisrICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisrICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKKysgICAgICBlbHNlCisrICAgICAgICBzeXNyb290X2NtZD0KKysgICAgICBmaQorKworKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcworKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKysgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisrICAgICAgICBkb25lCisrICAgICAgZWxzZQorKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKysgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisrCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorKwkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKKysJZG9uZQorKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorIAkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCitAQCAtMTc4NSw3ICsyNzA1LDcgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQorIAlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisgCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorIAkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCistCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgICRjbWRzIgorIAlmaQorICAgICAgIGRvbmUKK0BAIC0xNzk0LDUzICsyNzE0LDU1IEBAIGZ1bmNfbW9kZV9maW5pc2ggKCkKKyAgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworIAorLSAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKy0gICAgJEVDSE8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKy0gICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKy0gICAgICAkRUNITyAiICAgJGxpYmRpciIKKy0gICAgZG9uZQorLSAgICAkRUNITworLSAgICAkRUNITyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCistICAgICRFQ0hPICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKy0gICAgJEVDSE8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCistICAgICRFQ0hPICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCistICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorLSAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgICRFQ0hPICIgICAgIGR1cmluZyBleGVjdXRpb24iCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKy0gICAgICAkRUNITyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCistICAgICAgJEVDSE8gIiAgICAgZHVyaW5nIGxpbmtpbmciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorLSAgICAgIGxpYmRpcj1MSUJESVIKKy0gICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisrICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisrICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKysJJEVDSE8gIiAgICRsaWJkaXIiCisrICAgICAgZG9uZQorKyAgICAgIGVjaG8KKysgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKysgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKysgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKysgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKysJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKysJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKysJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwlsaWJkaXI9TElCRElSCisrCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAKKy0gICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorLSAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKy0gICAgICAkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCistICAgIGZpCistICAgICRFQ0hPCisrCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKysgICAgICBmaQorKyAgICAgIGVjaG8KKyAKKy0gICAgJEVDSE8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKy0gICAgICAgICRFQ0hPICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorLQkkRUNITyAicGFnZXMuIgorLQk7OworLSAgICAgICopCistICAgICAgICAkRUNITyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCistICAgICAgICA7OworLSAgICBlc2FjCistICAgICRFQ0hPICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAorKyAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorKyAgICAgIGNhc2UgJGhvc3QgaW4KKysJc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKysJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorKwkgIGVjaG8gInBhZ2VzLiIKKysJICA7OworKwkqKQorKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorKwkgIDs7CisrICAgICAgZXNhYworKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisrICAgIGZpCisgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKyt0ZXN0ICIkb3B0X21vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK0BAIC0xODUxLDcgKzI3NzMsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCistICAgICAgICRFQ0hPICJYJG5vbm9wdCIgfCAkR1JFUCBzaHRvb2wgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKyAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCitAQCAtMTg2NSw3ICsyNzg3LDEyIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLSAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKKysgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworKyAgICAgICopIGluc3RhbGxfY3A9ZmFsc2UgOzsKKysgICAgZXNhYworIAorICAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCisgICAgIGRlc3Q9CitAQCAtMTg3NSwxMCArMjgwMiwxMiBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICBpbnN0YWxsX3R5cGU9CisgICAgIGlzZGlyPW5vCisgICAgIHN0cmlwbWU9CisrICAgIG5vX21vZGU9OgorICAgICBmb3IgYXJnCisgICAgIGRvCisrICAgICAgYXJnMj0KKyAgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKy0JZmlsZXM9IiRmaWxlcyAkZGVzdCIKKysJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKyAJZGVzdD0kYXJnCisgCWNvbnRpbnVlCisgICAgICAgZmkKK0BAIC0xODg2LDEwICsyODE1LDkgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAgLWYpCistCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKy0JKltcXFwgL11jcFwgKikgOzsKKy0JKikgcHJldj0kYXJnIDs7CistCWVzYWMKKysJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorKwkgIHByZXY9JGFyZworKwlmaQorIAk7OworICAgICAgIC1nIHwgLW0gfCAtbykKKyAJcHJldj0kYXJnCitAQCAtMTkwMyw2ICsyODMxLDEwIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICAgKikKKyAJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorIAlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKysJICBpZiB0ZXN0ICJ4JHByZXYiID0geC1tICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCisrCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKKysJICAgIG5vX21vZGU9ZmFsc2UKKysJICBmaQorIAkgIHByZXY9CisgCWVsc2UKKyAJICBkZXN0PSRhcmcKK0BAIC0xOTEzLDcgKzI4NDUsMTEgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAKKyAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisrCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorKyAgICAgIGZpCisrICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgZG9uZQorIAorICAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCitAQCAtMTkyMiw2ICsyODU4LDEzIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorIAorKyAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKysJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKKysJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmaQorKyAgICBmaQorKworICAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisgCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCitAQCAtMTk3NiwxMCArMjkxOSwxMyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAqLiRsaWJleHQpCisgCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCistCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCisgCTs7CisgCisgICAgICAgKi5sYSkKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysKKyAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKyAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKyAJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKK0BAIC0xOTkzLDIzICsyOTM5LDIzIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisgCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZWxzZQorIAkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKyAJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCisgCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLQlkaXI9IiRkaXIkb2JqZGlyIgorKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCisgCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKyAJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorLQkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIlgkZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkbGliZGlyXCQlJSJgCisrCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisgCisgCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorIAkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKK0BAIC0yMDIyLDkgKzI5NjgsOSBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAorIAkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCistCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisrCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorIAkgIGVsc2UKKy0JICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKysJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisgCSAgZmkKKyAKKyAJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKK0BAIC0yMDQyLDExICsyOTg4LDExIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorIAorIAkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKy0JICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorIAkgICAgICAnZXhpdCAkPycKKyAJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisgCSAgY2FzZSAkaG9zdF9vcyBpbgorLQkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgCSAgICBjYXNlICRyZWFsbmFtZSBpbgorIAkgICAgKi5kbGwuYSkKKyAJICAgICAgdHN0cmlwbWU9IiIKK0BAIC0yMDgyLDcgKzMwMjgsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworIAorIAkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCistCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisrCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorIAk7OworIAorICAgICAgICoubG8pCitAQCAtMjE1Miw3ICszMDk4LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAKKyAJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorIAljYXNlICRob3N0IGluCistCSpjeWd3aW4qfCptaW5ndyopCisrCSpjeWd3aW4qIHwgKm1pbmd3KikKKyAJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisgCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorIAkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorQEAgLTIxODIsNyArMzEyOCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorIAkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKyAJICAgIGZpCistCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKysJICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKyAJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisgCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisgCSAgICAgIGZpbmFsaXplPW5vCitAQCAtMjIwMSw3ICszMTQ3LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAJICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorIAkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKy0JICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorIAorIAkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKyAJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorQEAgLTIyMjAsNyArMzE2Niw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCSAgICB9CisgCSAgZWxzZQorIAkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorLQkgICAgZmlsZT1gJEVDSE8gIlgkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFhzZWQgLWUgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisrCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisgCSAgZmkKKyAJZmkKKyAKK0BAIC0yMjU2LDExICszMjAyLDEzIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCisgICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisrICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorIAorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisgCisgICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCistCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworKwlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkdG9vbF9vbGRsaWIiICdleGl0ICQ/JworICAgICAgIGZpCisgCisgICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorQEAgLTIyNzksNyArMzIyNyw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGZpCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKK0BAIC0yMzIyLDYgKzMyNzAsMjIgQEAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKKyBleHRlcm4gXCJDXCIgeworICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgorKyNlbmRpZgorKworKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworIC8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisgIgorIAorQEAgLTIzMzEsMTAgKzMyOTUsMTEgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisgCisgCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorLQkgIHByb2dmaWxlcz1gJEVDSE8gIlgkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorKwkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKy0JICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorLQkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKysJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisgCSAgZG9uZQorIAorIAkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCitAQCAtMjM1OCw3ICszMzIzLDcgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworIAkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorLQkgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworIAkgICAgICAgIDs7CitAQCAtMjM3MCw3ICszMzM1LDcgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKyAJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorLQkgICAgICAgICpjeWd3aW4gfCAqbWluZ3cqICkKKysJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgCSAgICAgICAgICA7OworQEAgLTIzODMsMTAgKzMzNDgsNTIgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisgCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKyAJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCSAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCistCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCistCSAgfQorKyAgICAgICAgICBjYXNlICRob3N0IGluCisrCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKysJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisrCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisrCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKysJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisrCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKysJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisrCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorKwkgICAgICAgICAgZmkKKysJICAgICAgICBmaQorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisrCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgICBmaQorKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKysJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKysJICAgICAgICB9CisrCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgICAgIH0KKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqKQorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgICAgfQorKwkgICAgOzsKKysgICAgICAgICAgZXNhYworIAlkb25lCisgCisgCSRvcHRfZHJ5X3J1biB8fCB7CitAQCAtMjQxNCwzNiArMzQyMSwxOSBAQCBleHRlcm4gXCJDXCIgeworIAkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisgCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKyAJICBlbHNlCistCSAgICAkRUNITyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisrCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKyAJICBmaQorIAorLQkgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworIHR5cGVkZWYgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICphZGRyZXNzOworIH0gbHRfZGxzeW1saXN0OworLSIKKy0JICBjYXNlICRob3N0IGluCistCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKy0JICAgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UKKy0gICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorLSAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICpvc2Y1KikKKy0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCistLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YSAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICopCistCSAgICBsdF9kbHN5bV9jb25zdD1jb25zdCA7OworLQkgIGVzYWMKKy0KKy0JICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy1leHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKKyBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CistJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cisge1wKKyAgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorQEAgLTI0NTYsNyArMzQ0Niw3IEBAIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9CisgCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorIAkgICAgOzsKKyAJICBlc2FjCistCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisrCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgIHswLCAodm9pZCAqKSAwfQorIH07CisgCitAQCAtMjQ4Myw3ICszNDczLDcgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisgCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCisgCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKy0JICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisrCSAgKi0qLWZyZWVic2QyLip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKyAJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKyAJICAqLSotaHB1eCopCisgCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworQEAgLTI0OTksNyArMzQ4OSw3IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworIAkgIGNhc2UgJGFyZyBpbgorIAkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworLQkgICopIHN5bXRhYl9jZmxhZ3M9IiRzeW10YWJfY2ZsYWdzICRhcmciIDs7CisrCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7CisgCSAgZXNhYworIAlkb25lCisgCitAQCAtMjUxMiwxOCArMzUwMiwxOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIAkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorIAlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorIAljYXNlICRob3N0IGluCistCSpjeWd3aW4qIHwgKm1pbmd3KiApCisrCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorIAkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKy0JICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKy0JICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKysJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKyAJICBlbHNlCistCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKy0JICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisrCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisrCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKyAJICBmaQorIAkgIDs7CisgCSopCistCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCistCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKysJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisrCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisgCSAgOzsKKyAJZXNhYworIAk7OworQEAgLTI1MzcsOCArMzUyNyw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorIAorICAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCistICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKy0gICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCisrICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisrICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgZmkKKyB9CisgCitAQCAtMjU0OCw2ICszNTM4LDcgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAjIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKKyAjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorICMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorKyMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgorIGZ1bmNfd2luMzJfbGliaWQgKCkKKyB7CisgICAkb3B0X2RlYnVnCitAQCAtMjU1OCw5ICszNTQ5LDExIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKKyAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgICA7OworICAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworKyAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KKyAgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorLSAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycgPi9kZXYvbnVsbCA7IHRoZW4KKy0gICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgJDEgfAorKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAorIAkkU0VEIC1uIC1lICcKKyAJICAgIDEsMTAweworIAkJLyBJIC97CitAQCAtMjU4OSw2ICszNTgyLDEzMSBAQCBmdW5jX3dpbjMyX2xpYmlkICgpCisgICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCisgfQorIAorKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworKyMKKysjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisrIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKysjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKysjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCisrfQorKworKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgU0VDVElPTl9OQU1FIExJQk5BTUVzCisrIworKyMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQorKyMgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUKKysjIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgorKyMKKysjIFNFQ1RJT05fTkFNRSBpcyBlaXRoZXIgLmlkYXRhJDYgb3IgLmlkYXRhJDcsIGRlcGVuZGluZworKyMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KKysjCisrIyBFY2hvcyB0aGUgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUKKysjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisrICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKKysgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworKyAgICAgICMgUGxhY2UgbWFya2VyIGF0IGJlZ2lubmluZyBvZiBhcmNoaXZlIG1lbWJlciBkbGxuYW1lIHNlY3Rpb24KKysgICAgICBzLy4qLz09PT1NQVJLPT09PS8KKysgICAgICBwCisrICAgICAgZAorKyAgICB9CisrICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKysgICAgIyBhcmUgYWx3YXlzIHVuaW50ZXJlc3RpbmcKKysgICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCisrICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorKyAgICAjIEVuc3VyZSBtYXJrZXIgaXMgcHJpbnRlZAorKyAgICAvXj09PT1NQVJLPT09PS9wCisrICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisrICAgIC9eLlx7NDNcfS8hZAorKyAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycworKyAgICBzL14uXHs0M1x9Ly8nIHwKKysgICAgJFNFRCAtbiAnCisrICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQorKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKysgICAgICBICisrICAgICAgJCBiIHBhcmEKKysgICAgICBiCisrICAgICAgOnBhcmEKKysgICAgICB4CisrICAgICAgcy9cbi8vZworKyAgICAgICMgUmVtb3ZlIHRoZSBtYXJrZXIKKysgICAgICBzL149PT09TUFSSz09PT0vLworKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKysgICAgICBzL1tcLiBcdF0qJC8vCisrICAgICAgIyBQcmludAorKyAgICAgIC8uL3AnIHwKKysgICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCisrICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCisrICAgICMgYXJjaGl2ZSB3aGljaCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKKysgICAgIyBhbGwgdGhvc2Ugd2hpY2ggaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworKyAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKKysgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KKysgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKKysgICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQorKyAgICAjIGEgJy4nLgorKyAgICAjCisrICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCisrICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCisrfQorKworKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKysjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKysjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KKytmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisrICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgorK30KKysKKysjIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKKysjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKysjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KKytmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKKysgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCisrIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisrIyBpbXBvcnQgbGlicmFyeSBBUkcuCisrIworKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKysjIGRvZXMgbm90IHN1cHBvcnQgdGhlIC0taWRlbnRpZnktc3RyaWN0IG9wdGlvbi4KKysjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIiA7IHRoZW4KKysgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAorKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiA7IHRoZW4KKysgICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKKysgIGVsc2UKKysgICAgIyB1bmtub3duCisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PSIiCisrICBmaQorK30KKyAKKyAKKyAjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK0BAIC0yNTk3LDcgKzM3MTUsMTggQEAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKKyAgICAgJG9wdF9kZWJ1ZworICAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCistICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiICdleGl0ICQ/JworKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorKyAgICAgIGxvY2tmaWxlPSRmX2V4X2FuX2FyX29sZGxpYi5sb2NrCisrICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorKwlzbGVlcCAyCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiBcCisrCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCisrICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisrICAgICAgJG9wdF9kcnlfcnVuIHx8IHJtIC1mICIkbG9ja2ZpbGUiCisrICAgIGZpCisgICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICA6CisgICAgIGVsc2UKK0BAIC0yNjY4LDcgKzM3OTcsNyBAQCBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKKyAJICAgIGRhcndpbl9maWxlPQorIAkgICAgZGFyd2luX2ZpbGVzPQorIAkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCistCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgJE5MMlNQYAorKwkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisgCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisgCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorIAkgICAgJFJNIC1yZiB1bmZhdC0kJAorQEAgLTI2ODMsMzQgKzM4MTIsMzAgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCisgICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKyAJOzsKKyAgICAgICBlc2FjCistICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKysgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICAgZG9uZQorIAorICAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKKyB9CisgCisgCistCistIyBmdW5jX2VtaXRfd3JhcHBlciBhcmcKKysjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisgIworLSMgZW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0CistIyBkb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisrIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisrIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisgIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworICMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorLSMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlCisrIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisgIyBzZXQgdGhlcmVpbi4KKyAjCistIyBhcmcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisrIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisgIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyAjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKy0jIHRoZSAnLmxpYicgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworICMgYmVoYXZpb3IuCisgZnVuY19lbWl0X3dyYXBwZXIgKCkKKyB7CistCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9bm8KKy0JaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorLQkgIGZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JDEKKy0JZmkKKysJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99CisgCisgCSRFQ0hPICJcCisgIyEgJFNIRUxMCitAQCAtMjcyNiw3ICszODUxLDYgQEAgZnVuY19lbWl0X3dyYXBwZXIgKCkKKyAKKyAjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisgIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KKy1Yc2VkPScke1NFRH0gLWUgMXMvXlgvLycKKyBzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisgCisgIyBCZSBCb3VybmUgY29tcGF0aWJsZQorQEAgLTI3NTcsMzEgKzM4ODEsMTM1IEBAIGlmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorIGVsc2UKKyAgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKy0gICAgRUNITz1cIiRxZWNob1wiCistICAgIGZpbGU9XCJcJDBcIgorLSAgICAjIE1ha2Ugc3VyZSBlY2hvIHdvcmtzLgorLSAgICBpZiB0ZXN0IFwiWFwkMVwiID0gWC0tbm8tcmVleGVjOyB0aGVuCistICAgICAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCistICAgICAgc2hpZnQKKy0gICAgZWxpZiB0ZXN0IFwiWFxgeyBcJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbFxgXCIgPSAnWFx0JzsgdGhlbgorLSAgICAgICMgWWlwcGVlLCBcJEVDSE8gd29ya3MhCistICAgICAgOgorLSAgICBlbHNlCistICAgICAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSBcJEVDSE8gd2lsbCB3b3JrLgorLSAgICAgIGV4ZWMgJFNIRUxMIFwiXCQwXCIgLS1uby1yZWV4ZWMgXCR7MStcIlwkQFwifQorLSAgICBmaQorLSAgZmlcCisrICAgIGZpbGU9XCJcJDBcIiIKKysKKysgICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICAgJEVDSE8gIlwKKysKKysjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCisrZnVuY19mYWxsYmFja19lY2hvICgpCisreworKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKytcJDEKKytfTFRFQ0hPX0VPRicKKyt9CisrICAgIEVDSE89XCIkcUVDSE9cIgorKyAgZmkKKysKKysjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKysjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKysjIHRoaXMgcGF0dGVybikuCisrIworKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCisrbHRfb3B0aW9uX2RlYnVnPQorK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQorK3sKKysgIGx0X3NjcmlwdF9hcmcwPVwkMAorKyAgc2hpZnQKKysgIGZvciBsdF9vcHQKKysgIGRvCisrICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisrICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisrICAgIC0tbHQtZHVtcC1zY3JpcHQpCisrICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKysgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisrICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisrICAgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtLWx0LSopCisrICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorKyAgICAgICAgZXhpdCAxCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZG9uZQorKworKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisrICBmaQorK30KKysKKysjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKysjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKKytmdW5jX2x0X2R1bXBfYXJncyAoKQorK3sKKysgIGx0X2R1bXBfYXJnc19OPTE7CisrICBmb3IgbHRfYXJnCisrICBkbworKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisrICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisrICBkb25lCisrfQorKworKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKytmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCisreworICIKKy0JJEVDSE8gIlwKKysgIGNhc2UgJGhvc3QgaW4KKysgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKworKyAgKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKyAgZXNhYworKyAgJEVDSE8gIlwKKysgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisrICAgICAgZXhpdCAxCisrfQorKworKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisrIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKytmdW5jX2V4ZWNfcHJvZ3JhbSAoKQorK3sKKysgIGNhc2UgXCIgXCQqIFwiIGluCisrICAqXFwgLS1sdC0qKQorKyAgICBmb3IgbHRfd3JfYXJnCisrICAgIGRvCisrICAgICAgY2FzZSBcJGx0X3dyX2FyZyBpbgorKyAgICAgIC0tbHQtKikgOzsKKysgICAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworKyAgICAgIGVzYWMKKysgICAgICBzaGlmdAorKyAgICBkb25lIDs7CisrICBlc2FjCisrICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KKyt9CisrCisrICAjIFBhcnNlIG9wdGlvbnMKKysgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKyAKKyAgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCistICB0aGlzZGlyPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKiQlJSdcYAorKyAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKKyAgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKyAKKyAgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorLSAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCisrICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCistICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAorKyAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKlwkJSUnXGAKKyAKKyAgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCitAQCAtMjc5MSw4ICs0MDE5LDggQEAgZWxzZQorICAgICAgIGVzYWMKKyAgICAgZmkKKyAKKy0gICAgZmlsZT1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyVeLiovJSUnXGAKKy0gICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorKyAgICBmaWxlPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJV4uKi8lJSdcYAorKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICAgZG9uZQorIAorICAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCitAQCAtMjgwNSw3ICs0MDMzLDcgQEAgZWxzZQorICAgICBmaQorICAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCistICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJYXCR0aGlzZGlyXCIgfCBcJFhzZWQgLWUgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgIGVzYWMKKyAgIGZpCitAQCAtMjg2MCw2ICs0MDg4LDE4IEBAIGVsc2UKKyAKKyAgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisgCisrCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisrCSMKKysJIyBGaXggdGhlIERMTCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uICBEbyB0aGlzIGJlZm9yZSBwcmVwZW5kaW5nCisrCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCisrCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKysJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisrCSAgJEVDSE8gIlwKKysgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKysgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKysiCisrCWZpCisrCisgCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorIAlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgCSAgJEVDSE8gIlwKK0BAIC0yODY4LDUzICs0MTA4LDI4IEBAIGVsc2UKKyAKKyAgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCistICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiWFwkJHNobGlicGF0aF92YXJcIiB8IFwkWHNlZCAtZSAncy86OipcJC8vJ1xgCisrICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCisgCisgICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorICIKKyAJZmkKKyAKKy0JIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKy0JaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCistCSAgJEVDSE8gIlwKKy0gICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKy0gICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKy0iCistCWZpCistCisgCSRFQ0hPICJcCisgICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorLSIKKy0JY2FzZSAkaG9zdCBpbgorLQkjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKy0JKi0qLW1pbmd3IHwgKi0qLW9zMiopCistCSAgJEVDSE8gIlwKKy0gICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKy0iCistCSAgOzsKKy0KKy0JKikKKy0JICAkRUNITyAiXAorLSAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorLSIKKy0JICA7OworLQllc2FjCistCSRFQ0hPICJcCistICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorLSAgICAgIGV4aXQgMQorKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICAgZmkKKyAgIGVsc2UKKyAgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCisgICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorLSAgICAkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisrICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgIGV4aXQgMQorICAgZmkKKyBmaVwKKyAiCisgfQorLSMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcgorKworIAorICMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworICMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorQEAgLTI5MzIsMjAgKzQxNDcsMTggQEAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQorIAorICAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCistCistICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIiRTSEVMTCAkb3V0cHV0IiwKKy0gICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCistICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorICovCisgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorKyNpZmRlZiBfTVNDX1ZFUgorKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisrI2VuZGlmCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpZmRlZiBfTVNDX1ZFUgorICMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisgIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisgIyBpbmNsdWRlIDxpby5oPgorLSMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyAjZWxzZQorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgIyBpbmNsdWRlIDxzdGRpbnQuaD4KK0BAIC0yOTYyLDYgKzQxNzUsNDQgQEAgRU9GCisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisrLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLworKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCisraW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CisrIyBlbmRpZgorKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKysjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CisraW50IHB1dGVudiAoY2hhciAqKTsKKytpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKysjIGVuZGlmCisrLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKysjZW5kaWYKKysKKysvKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KKysjaWYgZGVmaW5lZChfTVNDX1ZFUikKKysjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisrIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisrIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisrIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisrIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisrIyAgZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECisrIyAgZGVmaW5lIGludHB0cl90IGludAorKyMgZW5kaWYKKysjZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKysjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisrIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKysjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKysjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKysjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisrIyBkZWZpbmUgSEFWRV9TRVRFTlYKKysjIGRlZmluZSBGT1BFTl9XQiAid2IiCisrLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZChQQVRIX01BWCkKKyAjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisgI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorQEAgLTI5NzcsMTQgKzQyMjgsNyBAQCBFT0YKKyAjIGRlZmluZSBTX0lYR1JQIDAKKyAjZW5kaWYKKyAKKy0jaWZkZWYgX01TQ19WRVIKKy0jIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCistIyBkZWZpbmUgc3RhdCBfc3RhdAorLSMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECistIyAgZGVmaW5lIGludHB0cl90IGludAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKysvKiBwYXRoIGhhbmRsaW5nIHBvcnRhYmlsaXR5IG1hY3JvcyAqLworICNpZm5kZWYgRElSX1NFUEFSQVRPUgorICMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisgIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCitAQCAtMzAxNSwxMCArNDI1OSw2IEBAIEVPRgorICMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorICNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisgCistI2lmZGVmIF9fQ1lHV0lOX18KKy0jIGRlZmluZSBGT1BFTl9XQiAid2IiCistI2VuZGlmCistCisgI2lmbmRlZiBGT1BFTl9XQgorICMgZGVmaW5lIEZPUEVOX1dCICJ3IgorICNlbmRpZgorQEAgLTMwMzEsMjIgKzQyNzEsMTMgQEAgRU9GCisgICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorIH0gd2hpbGUgKDApCisgCistI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorLSNpZiBkZWZpbmVkIERFQlVHV1JBUFBFUgorLSMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKSBsdHdyYXBwZXJfZGVidWdwcmludGYgYXJncworLXN0YXRpYyB2b2lkCistbHR3cmFwcGVyX2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKKy17CistICAgIHZhX2xpc3QgYXJnczsKKy0gICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CistICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworLSAgICB2YV9lbmQgKGFyZ3MpOworLX0KKysjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCisrc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisgI2Vsc2UKKy0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykKKytzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyAjZW5kaWYKKyAKKy1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKyAKKyB2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKKyBjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworQEAgLTMwNTYsMzcgKzQyODcsODggQEAgY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKKyBpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKKyBpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CisgY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cistdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKKyt2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKKytzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOworK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisrY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKKyt2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisrY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKKyt2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKKytFT0YKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqc2NyaXB0X3RleHQgPQorKwkgICAgY2F0IDw8RU9GCisrdm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKKytjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CisgRU9GCisgCistCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAorLQkgICAgICAgICRTRUQgLWUgJ3MvXChbXFwiXVwpL1xcXDEvZycgXAorLQkgICAgICAgICAgICAgLWUgJ3MvXi8gICIvJyAtZSAncy8kL1xcbiIvJworLQkgICAgZWNobyAiOyIKKysJICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKysgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKysJICAgICAgY2F0IDw8RU9GCisrY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CisrRU9GCisrCSAgICBlbHNlCisrCSAgICAgIGNhdCA8PCJFT0YiCisrY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKKytFT0YKKysJICAgIGZpCisgCistCSAgICBjYXQgPDxFT0YKKy1jb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworKwkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisrICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgorKwkgICAgICBjYXQgPDxFT0YKKytjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKKytjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKKytFT0YKKysJICAgIGVsc2UKKysJICAgICAgY2F0IDw8IkVPRiIKKytjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7CisrRU9GCisrCSAgICBmaQorKworKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKysJICAgICAgY2F0IDw8RU9GCisrY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KKytFT0YKKysJICAgIGVsc2UKKysJICAgICAgY2F0IDw8RU9GCisrY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KKytFT0YKKysJICAgIGZpCisrCisrCisrCSAgICBjYXQgPDwiRU9GIgorKworKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7Cisrc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgY2hhciAqKm5ld2FyZ3o7CisrICBpbnQgIG5ld2FyZ2M7CisgICBjaGFyICp0bXBfcGF0aHNwZWM7CisgICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKy0gIGNoYXIgKnNod3JhcHBlcl9uYW1lOworKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisrICBjaGFyICp0YXJnZXRfbmFtZTsKKysgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgIGludHB0cl90IHJ2YWwgPSAxMjc7CistICBGSUxFICpzaHdyYXBwZXI7CisgCistICBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCA9ICItLWx0LWR1bXAtc2NyaXB0IjsKKyAgIGludCBpOworIAorICAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGFyZ3ZbMF0gICAgICA6ICVzXG4iLCBhcmd2WzBdKSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKKysgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKyAKKy0gIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0ICovCisrICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisrICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisrICAgKi8KKysgIG5ld2FyZ2M9MDsKKyAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKK0BAIC0zMDk5LDgyICs0MzgxLDExMiBAQCBFT0YKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAKKy0JICAgIGNhdCA8PEVPRgorLQkgIHByaW50ZiAoIiVzIiwgc2NyaXB0X3RleHQpOworKwkgICAgY2F0IDw8IkVPRiIKKysJICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKKyAJICByZXR1cm4gMDsKKyAJfQorKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGRlYnVnX29wdCkgPT0gMCkKKysJeworKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisrICAgICAgICAgIGNvbnRpbnVlOworKwl9CisrICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisrICAgICAgICB7CisrICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKysgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisrICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisrICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisrICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKysgICAgICAgICAgICovCisrICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworKyAgICAgICAgfQorKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKysgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICAgfQorKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKyAKKy0gIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAyKTsKKyBFT0YKKy0KKy0JICAgIGlmIHRlc3QgLW4gIiRUQVJHRVRTSEVMTCIgOyB0aGVuCistCSAgICAgICMgbm8gcGF0aCB0cmFuc2xhdGlvbiBhdCBhbGwKKy0JICAgICAgbHRfbmV3YXJndjA9JFRBUkdFVFNIRUxMCistCSAgICBlbHNlCistCSAgICAgIGNhc2UgIiRob3N0IiBpbgorLQkJKm1pbmd3KiApCistCQkgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorLQkJICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorLQkJICBsdF9uZXdhcmd2MD1gKCBjbWQgLy9jIGVjaG8gJFNIRUxMIHwgJFNFRCAtZSAiJGx0X3NlZF9zdHJpcF90cmFpbGluZ19zcGFjZXMiICkgMj4vZGV2L251bGwgfHwgZWNobyAkU0hFTExgCistCQkgIGNhc2UgJGx0X25ld2FyZ3YwIGluCistCQkgICAgKi5leGUgfCAqLkVYRSkgOzsKKy0JCSAgICAqKSBsdF9uZXdhcmd2MD0kbHRfbmV3YXJndjAuZXhlIDs7CistCQkgIGVzYWMKKy0JCSAgOzsKKy0JCSogKSBsdF9uZXdhcmd2MD0kU0hFTEwgOzsKKy0JICAgICAgZXNhYworLQkgICAgZmkKKy0KKy0JCWNhdCA8PEVPRgorLSAgbmV3YXJnelswXSA9IChjaGFyICopIHhzdHJkdXAgKCIkbHRfbmV3YXJndjAiKTsKKysJICAgIGNhdCA8PEVPRgorKyAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKKyBFT0YKKy0KKyAJICAgIGNhdCA8PCJFT0YiCisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKKysKKyAgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCistICAgIGx0X2ZhdGFsICgiQ291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorLQkJCSAgdG1wX3BhdGhzcGVjKSk7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorKwkJICB0bXBfcGF0aHNwZWMpOworIAorICAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorLQkJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKysJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgCistICBzaHdyYXBwZXJfbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKy0gIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIHNod3JhcHBlcl9uYW1lKTsKKy0KKy0gIC8qIHNod3JhcHBlcl9uYW1lIHRyYW5zZm9ybXMgKi8KKy0gIHN0cmVuZHphcCAoc2h3cmFwcGVyX25hbWUsICIuZXhlIik7CistICB0bXBfcGF0aHNwZWMgPSBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChzaHdyYXBwZXJfbmFtZSkgKworLQkJCQkgc3RybGVuICgiX2x0c2h3cmFwcGVyVE1QIikgKyAxKSk7CistICBzdHJjcHkgKHRtcF9wYXRoc3BlYywgc2h3cmFwcGVyX25hbWUpOworLSAgc3RyY2F0ICh0bXBfcGF0aHNwZWMsICJfbHRzaHdyYXBwZXJUTVAiKTsKKy0gIFhGUkVFIChzaHdyYXBwZXJfbmFtZSk7CistICBzaHdyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKysgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworKworKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKysgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7CisrICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKysgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisrICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgIHRtcF9wYXRoc3BlYyA9IDA7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGxpYnRvb2wgc2hlbGwgd3JhcHBlciBuYW1lOiAlc1xuIiwKKy0JCQkgIHNod3JhcHBlcl9uYW1lKSk7CisrCisrICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCisrICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKysgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOworKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKysgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworKyAgdG1wX3BhdGhzcGVjID0gMDsKKysKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisrCQkgIHRhcmdldF9uYW1lKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorLSAgbmV3YXJnelsxXSA9CisrICBuZXdhcmd6WzBdID0KKyAgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKy0JCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChzaHdyYXBwZXJfbmFtZSkgKyAxKSk7CistICBzdHJjcHkgKG5ld2FyZ3pbMV0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKy0gIHN0cmNhdCAobmV3YXJnelsxXSwgIiRvYmpkaXIiKTsKKy0gIHN0cmNhdCAobmV3YXJnelsxXSwgIi8iKTsKKy0gIHN0cmNhdCAobmV3YXJnelsxXSwgc2h3cmFwcGVyX25hbWUpOworKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKysgIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworIEVPRgorIAorKwkgICAgY2F0IDw8IkVPRiIKKysgIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCisrICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKysKKysgIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLworKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisrCisrICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KKysgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisrICB0bXBfcGF0aHNwZWMgPSBOVUxMOworK0VPRgorIAorIAkgICAgY2FzZSAkaG9zdF9vcyBpbgorIAkgICAgICBtaW5ndyopCisgCSAgICBjYXQgPDwiRU9GIgorICAgeworICAgICBjaGFyKiBwOworLSAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMV0sICdcXCcpKSAhPSBOVUxMKQorKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorKyAgICAgIHsKKysJKnAgPSAnLyc7CisrICAgICAgfQorKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCisgICAgICAgeworIAkqcCA9ICcvJzsKKyAgICAgICB9CitAQCAtMzE4NCw2MiArNDQ5Niw2MyBAQCBFT0YKKyAJICAgIGVzYWMKKyAKKyAJICAgIGNhdCA8PCJFT0YiCistICBYRlJFRSAoc2h3cmFwcGVyX25hbWUpOworKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CistCistICAvKiBhbHdheXMgd3JpdGUgaW4gYmluYXJ5IG1vZGUgKi8KKy0gIGlmICgoc2h3cmFwcGVyID0gZm9wZW4gKG5ld2FyZ3pbMV0sIEZPUEVOX1dCKSkgPT0gMCkKKysgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisrCisrICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKysgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKysgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKysgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQorKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisrICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworKyAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisrICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKysKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKKysJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisrICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgICB7CistICAgICAgbHRfZmF0YWwgKCJDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIsIG5ld2FyZ3pbMV0pOworLSAgICB9CistICBmcHJpbnRmIChzaHdyYXBwZXIsICIlcyIsIHNjcmlwdF90ZXh0KTsKKy0gIGZjbG9zZSAoc2h3cmFwcGVyKTsKKy0KKy0gIG1ha2VfZXhlY3V0YWJsZSAobmV3YXJnelsxXSk7CistCistICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorLSAgICBuZXdhcmd6W2kgKyAxXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworLSAgbmV3YXJnelthcmdjICsgMV0gPSBOVUxMOworLQorLSAgZm9yIChpID0gMDsgaSA8IGFyZ2MgKyAxOyBpKyspCistICAgIHsKKy0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgbmV3YXJneltpXSkpOworKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorKwkJICAgICAgaSwgbm9ubnVsbCAobmV3YXJneltpXSkpOworICAgICB9CisgCisgRU9GCisgCisgCSAgICBjYXNlICRob3N0X29zIGluCisgCSAgICAgIG1pbmd3KikKKy0JCWNhdCA8PEVPRgorKwkJY2F0IDw8IkVPRiIKKyAgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCistICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgIiRsdF9uZXdhcmd2MCIsIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisrICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7CisrICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICAgaWYgKHJ2YWwgPT0gLTEpCisgICAgIHsKKyAgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIkbHRfbmV3YXJndjBcIjogZXJybm8gPSAlZFxuIiwgZXJybm8pKTsKKysgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAorKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICAgcmV0dXJuIDEyNzsKKyAgICAgfQorICAgcmV0dXJuIHJ2YWw7CistfQorIEVPRgorIAkJOzsKKyAJICAgICAgKikKKy0JCWNhdCA8PEVPRgorLSAgZXhlY3YgKCIkbHRfbmV3YXJndjAiLCBuZXdhcmd6KTsKKysJCWNhdCA8PCJFT0YiCisrICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCistfQorIEVPRgorIAkJOzsKKyAJICAgIGVzYWMKKyAKKyAJICAgIGNhdCA8PCJFT0YiCisrfQorIAorIHZvaWQgKgorIHhtYWxsb2MgKHNpemVfdCBudW0pCisgeworICAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgIGlmICghcCkKKy0gICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisgCisgICByZXR1cm4gcDsKKyB9CitAQCAtMzI3Myw4ICs0NTg2LDggQEAgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKKyB7CisgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsCistCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzI5MSw4ICs0NjA0LDggQEAgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQorICAgaW50IHJ2YWwgPSAwOworICAgc3RydWN0IHN0YXQgc3Q7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1ha2VfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzMxOCw4ICs0NjMxLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgaW50IHRtcF9sZW47CisgICBjaGFyICpjb25jYXRfbmFtZTsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCistCQkJICB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKyAKKyAgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgIHJldHVybiBOVUxMOworQEAgLTMzNzIsNyArNDY4NSw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAJCXsKKyAJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKyAJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorLQkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworIAkJICBjb25jYXRfbmFtZSA9CisgCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CitAQCAtMzM5Nyw3ICs0NzExLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgICB9CisgICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCistICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworQEAgLTM0MjMsOCArNDczOCw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIGludCBoYXNfc3ltbGlua3MgPSAwOworICAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgICB7CistICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCistCQkJICAgICAgdG1wX3BhdGhzcGVjKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisgCXsKKyAJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorQEAgLTM0NDYsOCArNDc2Miw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yIChlcnJubyk7CistCSAgbHRfZmF0YWwgKCJFcnJvciBhY2Nlc3NpbmcgZmlsZSAlcyAoJXMpIiwgdG1wX3BhdGhzcGVjLCBlcnJzdHIpOworKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAl9CisgICAgIH0KKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworQEAgLTM0NjAsNyArNDc3Nyw4IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICAgeworLSAgICAgIGx0X2ZhdGFsICgiQ291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisrICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICAgfQorICAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisgI2VuZGlmCitAQCAtMzQ4NiwxMSArNDgwNCwyNSBAQCBzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQorICAgcmV0dXJuIHN0cjsKKyB9CisgCisrdm9pZAorK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaWYgKGx0X2RlYnVnKQorKyAgICB7CisrICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworKyAgICAgIHZhX2VuZCAoYXJncyk7CisrICAgIH0KKyt9CisrCisgc3RhdGljIHZvaWQKKy1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisrbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQorIHsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKysgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworIAorQEAgLTM0OTksMjMgKzQ4MzEsMjcwIEBAIGx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqbW9kZSwKKyB9CisgCisgdm9pZAorLWx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisrbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisgeworICAgdmFfbGlzdCBhcDsKKyAgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CistICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKysgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICAgdmFfZW5kIChhcCk7CisgfQorKworK3N0YXRpYyBjb25zdCBjaGFyICoKKytub25udWxsIChjb25zdCBjaGFyICpzKQorK3sKKysgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqCisrbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKKyt9CisrCisrdm9pZAorK2x0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisreworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworKyAgeworKyNpZmRlZiBIQVZFX1NFVEVOVgorKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisrICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKysjZWxzZQorKyAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisrICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisrICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKysgICAgICB7CisrICAgICAgICBYRlJFRSAoc3RyKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrfQorKworK2NoYXIgKgorK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKKyt7CisrICBjaGFyICpuZXdfdmFsdWU7CisrICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKysgICAgeworKyAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisrICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisrICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisrICAgICAgaWYgKHRvX2VuZCkKKysgICAgICAgIHsKKysgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisrICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisrICAgIH0KKysgIHJldHVybiBuZXdfdmFsdWU7CisrfQorKworK3ZvaWQKKytsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorK3sKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisrCisrICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisrICAgIHsKKysgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisrICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKysgICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOworKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisrICAgICAgICB7CisrICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOworKyAgICAgICAgfQorKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKysgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKysgICAgfQorK30KKysKKyt2b2lkCisrbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyt7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworKworKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorKyAgICB7CisrICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKysgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKysgICAgfQorK30KKysKKytFT0YKKysJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysJICAgICAgbWluZ3cqKQorKwkJY2F0IDw8IkVPRiIKKysKKysvKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KKysgICBOb3RlIHRoYXQgc3Bhd24oKSBkb2VzIG5vdCBieSBpdHNlbGYgY2FsbCB0aGUgY29tbWFuZCBpbnRlcnByZXRlcgorKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKysgICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKysgICAgICAgICBHZXRWZXJzaW9uRXgoJnYpOworKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKysgICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgorKyAgIEluc3RlYWQgaXQgc2ltcGx5IGNvbmNhdGVuYXRlcyB0aGUgYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkgJyAnLCBhbmQgY2FsbHMKKysgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCisrICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKKysgICBzcGVjaWFsIHdheToKKysgICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCisrICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCisrICAgLSBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dC4gVGhlaXIgb25seSBlZmZlY3QgaXMKKysgICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKKysgICAgIGNoYXJhY3RlcnMuCisrICAgLSBCYWNrc2xhc2hlcyBub3QgZm9sbG93ZWQgYnkgZG91YmxlIHF1b3RlcyBhcmUgbm90IHNwZWNpYWwuCisrICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCisrICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgorKyAgICAgICBcIiAtPiAiCisrICAgICAgIFxcXCIgLT4gXCIKKysgICAgICAgXFxcXFwiIC0+IFxcIgorKyAqLworKyNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorK2NoYXIgKioKKytwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKKyt7CisrICBzaXplX3QgYXJnYzsKKysgIGNoYXIgKipuZXdfYXJndjsKKysgIHNpemVfdCBpOworKworKyAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisrICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKKysgICAgOworKworKyAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisrICBuZXdfYXJndiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworKworKyAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisrICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKKysKKysgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisrCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKysgICAgICBlbHNlIGlmIChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQRUNJQUxfQ0hBUlMpICE9IE5VTEwpCisrCXsKKysJICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworKwkgIHNpemVfdCBsZW5ndGg7CisrCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworKwkgIGNvbnN0IGNoYXIgKnM7CisrCSAgY2hhciAqcXVvdGVkX3N0cmluZzsKKysJICBjaGFyICpwOworKworKwkgIGxlbmd0aCA9IDA7CisrCSAgYmFja3NsYXNoZXMgPSAwOworKwkgIGlmIChxdW90ZV9hcm91bmQpCisrCSAgICBsZW5ndGgrKzsKKysJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKysJICAgIHsKKysJICAgICAgY2hhciBjID0gKnM7CisrCSAgICAgIGlmIChjID09ICciJykKKysJCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisrCSAgICAgIGxlbmd0aCsrOworKwkgICAgICBpZiAoYyA9PSAnXFwnKQorKwkJYmFja3NsYXNoZXMrKzsKKysJICAgICAgZWxzZQorKwkJYmFja3NsYXNoZXMgPSAwOworKwkgICAgfQorKwkgIGlmIChxdW90ZV9hcm91bmQpCisrCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworKworKwkgIHF1b3RlZF9zdHJpbmcgPSBYTUFMTE9DIChjaGFyLCBsZW5ndGggKyAxKTsKKysKKysJICBwID0gcXVvdGVkX3N0cmluZzsKKysJICBiYWNrc2xhc2hlcyA9IDA7CisrCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKysJICAgICpwKysgPSAnIic7CisrCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisrCSAgICB7CisrCSAgICAgIGNoYXIgYyA9ICpzOworKwkgICAgICBpZiAoYyA9PSAnIicpCisrCQl7CisrCQkgIHVuc2lnbmVkIGludCBqOworKwkJICBmb3IgKGogPSBiYWNrc2xhc2hlcyArIDE7IGogPiAwOyBqLS0pCisrCQkgICAgKnArKyA9ICdcXCc7CisrCQl9CisrCSAgICAgICpwKysgPSBjOworKwkgICAgICBpZiAoYyA9PSAnXFwnKQorKwkJYmFja3NsYXNoZXMrKzsKKysJICAgICAgZWxzZQorKwkJYmFja3NsYXNoZXMgPSAwOworKwkgICAgfQorKwkgIGlmIChxdW90ZV9hcm91bmQpCisrCSAgICB7CisrCSAgICAgIHVuc2lnbmVkIGludCBqOworKwkgICAgICBmb3IgKGogPSBiYWNrc2xhc2hlczsgaiA+IDA7IGotLSkKKysJCSpwKysgPSAnXFwnOworKwkgICAgICAqcCsrID0gJyInOworKwkgICAgfQorKwkgICpwID0gJ1wwJzsKKysKKysJICBuZXdfYXJndltpXSA9IHF1b3RlZF9zdHJpbmc7CisrCX0KKysgICAgICBlbHNlCisrCW5ld19hcmd2W2ldID0gKGNoYXIgKikgc3RyaW5nOworKyAgICB9CisrICBuZXdfYXJndlthcmdjXSA9IE5VTEw7CisrCisrICByZXR1cm4gbmV3X2FyZ3Y7CisrfQorK0VPRgorKwkJOzsKKysJICAgIGVzYWMKKysKKysgICAgICAgICAgICBjYXQgPDwiRU9GIgorK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCisreworK0VPRgorKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKKysJICAgICAgJFNFRCAtbiAtZSAnCisrcy9eXCguXHs3OVx9XClcKC4uKlwpL1wxXAorK1wyLworK2gKKytzL1woW1xcIl1cKS9cXFwxL2cKKytzLyQvXFxuLworK3MvXChbXlxuXSpcKS4qLyAgZnB1dHMgKCJcMSIsIGYpOy9wCisrZworK0QnCisrICAgICAgICAgICAgY2F0IDw8IkVPRiIKKyt9CisgRU9GCisgfQorICMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisgCisrIyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCBBUkcKKysjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKKytmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQorK3sKKysgICAgJG9wdF9kZWJ1ZworKyAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCisrICAgICppbXBvcnQqKSA6IDs7CisrICAgICopIGZhbHNlIDs7CisrICAgIGVzYWMKKyt9CisrCisgIyBmdW5jX21vZGVfbGluayBhcmcuLi4KKyBmdW5jX21vZGVfbGluayAoKQorIHsKKyAgICAgJG9wdF9kZWJ1ZworICAgICBjYXNlICRob3N0IGluCistICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQorKyAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorQEAgLTM1NTQsNiArNTEzMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorIAorICAgICBhdm9pZF92ZXJzaW9uPW5vCisrICAgIGJpbmRpcj0KKyAgICAgZGxmaWxlcz0KKyAgICAgZGxwcmVmaWxlcz0KKyAgICAgZGxzZWxmPW5vCitAQCAtMzY0Niw2ICs1MjI2LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWVzYWMKKyAKKyAJY2FzZSAkcHJldiBpbgorKwliaW5kaXIpCisrCSAgYmluZGlyPSIkYXJnIgorKwkgIHByZXY9CisrCSAgY29udGludWUKKysJICA7OworIAlkbGZpbGVzfGRscHJlZmlsZXMpCisgCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKyAJICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCitAQCAtMzY3Nyw5ICs1MjYyLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKy0JICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKysJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCisgCSAgICBlbHNlCistCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorIAkgICAgZmkKKyAJICAgIHByZXY9CisgCSAgICBjb250aW51ZQorQEAgLTM3MDMsNyArNTI4OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqLSotZGFyd2luKikKKyAJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorIAkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CistCQkqKSBkZXBsaWJzPSIkZGVwbGlicyAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisrCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorIAkJICAgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworQEAgLTM3MjIsNyArNTMwNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBtb3JlYXJncz0KKyAJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKyAJICAgIGRvCistIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisrIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisgCSAgICAgIGFyZz0kZmlsCisgCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorIAorQEAgLTM3NTEsNyArNTMzNiw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCistCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCSAgICAgIHByZXY9CisgCQkgICAgICBjb250aW51ZQorIAkJICAgIGVsc2UKK0BAIC0zNzYzLDcgKzUzNDgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorIAkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorLQkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCSAgICBwcmV2PQorIAkJICBmaQorIAorQEAgLTM4MzMsMTIgKzU0MTgsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorIAkgICAgY2FzZSAiJHJwYXRoICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CisgCSAgICBlc2FjCisgCSAgZWxzZQorIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OworIAkgICAgZXNhYworIAkgIGZpCisgCSAgcHJldj0KK0BAIC0zODUwLDI4ICs1NDM1LDI4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY29udGludWUKKyAJICA7OworIAl3ZWFrKQorLQkgIHdlYWtfbGlicz0iJHdlYWtfbGlicyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCisgCSAgcHJldj0KKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhjY2xpbmtlcikKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGNvbXBpbGVyKQorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhsaW5rZXIpCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKK0BAIC0zOTA3LDYgKzU0OTIsMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJY29udGludWUKKyAJOzsKKyAKKysgICAgICAtYmluZGlyKQorKwlwcmV2PWJpbmRpcgorKwljb250aW51ZQorKwk7OworKworICAgICAgIC1kbG9wZW4pCisgCXByZXY9ZGxmaWxlcworIAljb250aW51ZQorQEAgLTM5NTcsOCArNTU0NywxNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAk7OworIAorICAgICAgIC1MKikKKy0JZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGFyZyIKKy0JZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKKysJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKysJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKysJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisrCSAgZWxzZQorKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisrCSAgZmkKKysJZmkKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisgCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAljYXNlICRkaXIgaW4KKyAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworQEAgLTM5NzAsMjIgKzU1NjgsMzAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICA7OworIAllc2FjCisgCWNhc2UgIiRkZXBsaWJzICIgaW4KKy0JKiIgLUwkZGlyICIqKSA7OworKwkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQorKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKysJICA7OworIAkqKQorLQkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKy0JICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKysJICAjIFByZXNlcnZlIHN5c3Jvb3QsIGJ1dCBuZXZlciBpbmNsdWRlIHJlbGF0aXZlIGRpcmVjdG9yaWVzCisrCSAgY2FzZSAkZGlyIGluCisrCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLUwkZGlyIiA7OworKwkgIGVzYWMKKysJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAkaG9zdCBpbgorLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKKy0JICB0ZXN0YmluZGlyPWAkRUNITyAiWCRkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRkaXI6IiopIDs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtMzk5NSw3ICs1NjAxLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAtbCopCisgCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKyAJICBjYXNlICRob3N0IGluCistCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqKQorKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKyAJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCisgCSAgICBjb250aW51ZQorIAkgICAgOzsKK0BAIC00MDA5LDcgKzU2MTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisgCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKyAJICAgIGNvbnRpbnVlCisgCSAgICA7OworIAkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKK0BAIC00MDI5LDcgKzU2MzUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICA7OworIAkgZXNhYworIAlmaQorLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKyAJY29udGludWUKKyAJOzsKKyAKK0BAIC00MDQxLDIxICs1NjQ3LDIyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorLSAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCistCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKysgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKysJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAJcHJldj14Y29tcGlsZXIKKyAJY29udGludWUKKyAJOzsKKyAKKy0gICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisrICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKysJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkYXJnIiA7OworKwkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKKyAJZXNhYworIAljb250aW51ZQorIAk7OworQEAgLTQwNzIsNyArNTY3OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgICAgICAgLW5vLWluc3RhbGwpCisgCWNhc2UgJGhvc3QgaW4KKy0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKikKKysJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQorIAkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworIAkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorIAkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCitAQCAtNDEyMiwxMyArNTcyOSwxNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJY2FzZSAkZGlyIGluCisgCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKysJPSopCisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgorKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICA7OworIAkqKQorIAkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAiJHhycGF0aCAiIGluCisgCSoiICRkaXIgIiopIDs7CistCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworIAllc2FjCisgCWNvbnRpbnVlCisgCTs7CitAQCAtNDE4MSw4ICs1NzkyLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorLQkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAlkb25lCisgCUlGUz0iJHNhdmVfaWZzIgorIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCitAQCAtNDE5Nyw5ICs1ODA4LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorLQkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAlkb25lCisgCUlGUz0iJHNhdmVfaWZzIgorIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCitAQCAtNDIyNywyMyArNTgzOCwyNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAJOzsKKyAKKy0gICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgorLSAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCistICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgorLSAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCistICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKy0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKKy0gICAgICAjIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQworLSAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKy0gICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCistICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKKysgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisrICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisrICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKysgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCisrICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisrICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisrICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKysgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAorKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCistICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqKQorKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAorKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKKyAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICAgY29udGludWUKKyAgICAgICAgIDs7CisgCitAQCAtNDI1NSw3ICs1ODcwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAqLiRvYmpleHQpCisgCSMgQSBzdGFuZGFyZCBvYmplY3QuCistCW9ianM9IiRvYmpzICRhcmciCisrCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgorIAk7OworIAorICAgICAgICoubG8pCitAQCAtNDI4Niw3ICs1OTAxLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorLQkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisrCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisgCQlwcmV2PQorIAkJY29udGludWUKKyAJICAgICAgZWxzZQorQEAgLTQyOTgsNyArNTkxMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCistCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisgCSAgICAgIHByZXY9CisgCSAgICBmaQorIAorQEAgLTQzNDMsMjQgKzU5NTgsMjUgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAqLiRsaWJleHQpCisgCSMgQW4gYXJjaGl2ZS4KKy0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKy0Jb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKysJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgorIAljb250aW51ZQorIAk7OworIAorICAgICAgICoubGEpCisgCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKyAKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCisgCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKy0JICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIHByZXY9CisgCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCistCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBwcmV2PQorIAllbHNlCistCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJZmkKKyAJY29udGludWUKKyAJOzsKK0BAIC00Mzk4LDcgKzYwMTQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCistICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlhcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFhzZWQgLWUgXCdzLzovIC9nXCdcYAorKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCisgICAgIGVsc2UKKyAgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICAgZmkKK0BAIC00NDA3LDYgKzYwMjMsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCisrICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorIAorQEAgLTQ0MjcsMTIgKzYwNDUsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworLSAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJY2FzZSAiJGxpYnMgIiBpbgorLQkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGZpCistICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKKyAgICAgZG9uZQorIAorICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCitAQCAtNDQ0NSw5ICs2MDYzLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorIAlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKyAJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCistCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKysJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OworIAkgIGVzYWMKKy0JICBwcmVfcG9zdF9kZXBzPSIkcHJlX3Bvc3RfZGVwcyAkcHJlX3Bvc3RfZGVwIgorKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgorIAlkb25lCisgICAgICAgZmkKKyAgICAgICBwcmVfcG9zdF9kZXBzPQorQEAgLTQ1MTcsMTcgKzYxMzUsMTkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKyAJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisgCSAgZGVwZW5kZW5jeV9saWJzPQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorIAkgIGNhc2UgJGxpYiBpbgorLQkgICoubGEpCWZ1bmNfc291cmNlICIkbGliIiA7OworKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgIGVzYWMKKyAKKyAJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKyAJICAjIGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCistICAgICAgICAgICAgZGVwbGliX2Jhc2U9YCRFQ0hPICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKysJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisrICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisgCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CistCSAgICAqKSBkZXBsaWJzPSIkZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlkb25lCitAQCAtNDU0MywxNiArNjE2MywxNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlsaWI9CisgCWZvdW5kPW5vCisgCWNhc2UgJGRlcGxpYiBpbgorLQktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKKysgICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCisgCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisgCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKyAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgZWxzZQorLQkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKyAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisgCQllc2FjCisgCSAgICBmaQorIAkgIGZpCitAQCAtNDYzNyw3ICs2MjU4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisgCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkJICAgICoiICRkZXBsaWIgIiopIDs7CistCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKysJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworIAkJZXNhYworIAkgICAgZmkKKyAJICBmaQorQEAgLTQ2NTAsNyArNjI3MSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisgCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICAgIDs7CisgCSAgcHJvZykKKyAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KK0BAIC00NjY0LDcgKzYyODYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorIAkgICAgZmkKKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKK0BAIC00Njc1LDE3ICs2Mjk4LDIxIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCS1SKikKKyAJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisgCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgorLQkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisgCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKyAJICAgICoiICRkaXIgIiopIDs7CistCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisgCSAgICBlc2FjCisgCSAgZmkKKyAJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKy0JKi5sYSkgbGliPSIkZGVwbGliIiA7OworKwkqLmxhKQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCSAgOzsKKyAJKi4kbGliZXh0KQorIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKyAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCitAQCAtNDcwMyw3ICs2MzMwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCW1hdGNoX3BhdHRlcm4qKQorIAkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorIAkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCistCQkgIGlmIGV2YWwgIlwkRUNITyBcIlgkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFhzZWQgLWUgMTBxIFwKKysJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKyAJCSAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisgCQkgICAgdmFsaWRfYV9saWI9eWVzCisgCQkgIGZpCitAQCAtNDcxMywxNSArNjM0MCwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorLQkJJEVDSE8KKysJCWVjaG8KKyAJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCistCQkkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKy0JCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorLQkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKy0JCSRFQ0hPICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKy0JCSRFQ0hPICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlIGhlcmUuIgorKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKysJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisrCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisrCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKysJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisgCSAgICAgIGVsc2UKKy0JCSRFQ0hPCisrCQllY2hvCisgCQkkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCisgCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKyAJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCitAQCAtNDc0OCwxMSArNjM3NSwxMSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKyAJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisgCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKKyAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisgCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgICBlbHNlCistCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorIAkgICAgZmkKKyAJICBmaQorIAkgIGNvbnRpbnVlCitAQCAtNDc5NCwyMCArNjQyMSwyMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorIAlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKy0JICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlgkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisrCSAgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzLy1mcmFtZXdvcmsgXChbXiAkXSpcKS9cMS5sdGZyYW1ld29yay9nJ2AKKyAJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisgCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CistCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZmkKKy0JZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCAkZGVwZW5kZW5jeV9saWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIgJGRlcGVuZGVuY3lfbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorIAlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorIAkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKKyAJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKy0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgorLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisrCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRkbG9wZW4iCisrCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCisgCWZpCisgCisgCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KK0BAIC00ODE4LDMwICs2NDQ1LDM2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorIAkgICAgZmkKKyAJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKy0JICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorLQkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKysJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgdG1wX2xpYnM9CisrCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisrCSAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisrCQljYXNlICIkdG1wX2xpYnMgIiBpbgorKwkJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworKwkJZXNhYworKwkgICAgICBmaQorKwkgICAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisrCSAgICBkb25lCisgCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKyAJICBmaQorLQkgIHRtcF9saWJzPQorLQkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKy0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorLQkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgIGZpCistCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCistCSAgZG9uZQorIAkgIGNvbnRpbnVlCisgCWZpICMgJHBhc3MgPSBjb252CisgCisgCisgCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKyAJbGlua2xpYj0KKy0JZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworLQkgIGxpbmtsaWI9IiRsIgorLQlkb25lCisrCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKysJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorKwkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisrCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKysJZWxzZQorKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKysJICAgIGxpbmtsaWI9IiRsIgorKwkgIGRvbmUKKysJZmkKKyAJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisgCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCWZpCitAQCAtNDg1OCw5ICs2NDkxLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisgCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorIAkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorLQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKyAJICBlbHNlCistCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCisgCSAgZmkKKyAJICBjb250aW51ZQorIAlmaSAjICRwYXNzID0gZGxvcGVuCitAQCAtNDg4MiwxNCArNjUxNSwxNCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKyAJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorLQkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKysJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKyAJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisgCSAgICBkaXI9IiRsYWRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCistCSAgICBkaXI9IiRsaWJkaXIiCistCSAgICBhYnNkaXI9IiRsaWJkaXIiCisrCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKysJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgIGZpCisgCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKyAJZWxzZQorQEAgLTQ4OTcsMTIgKzY1MzAsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGRpcj0iJGxhZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisrCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorIAkgIGVsc2UKKyAJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKyAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKy0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKyAJICBmaQorIAlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCitAQCAtNDkxMywyMCArNjU0Niw0NiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisgCSAgZmkKKy0JICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKy0JICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKy0JICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKy0JICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworLQkgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCistCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCistCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorLQkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCistCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorLQkgIGVsc2UKKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCistCSAgZmkKKysJICBjYXNlICIkaG9zdCIgaW4KKysJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKysJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKysJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKysJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKysJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKysJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKysJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisrCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGVsc2UKKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisrCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisrCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqICkKKysJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisrCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorKwkgICAgICBlbHNlCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGZpCisrCSAgICA7OworKwkgIGVzYWMKKyAJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorIAorIAlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorQEAgLTQ5NDQsNyArNjYwMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCisgCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCistCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCisgCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKyAKKyAJICBsaW5rYWxsZGVwbGlicz1ubworQEAgLTQ5NTcsNyArNjYxNiw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJCSA7OworIAkgICAgZXNhYworIAkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworQEAgLTQ5NjgsMTIgKzY2MjgsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKyAJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgICBmaQorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorIAkgIGRvbmUgIyBmb3IgZGVwbGliCisgCSAgY29udGludWUKKyAJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCitAQCAtNDk4OCw3ICs2NjQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorIAkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisgCSAgICAgICoiJGFic2RpcjoiKikgOzsKKy0JICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCitAQCAtNTAwMCw3ICs2NjYwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01MDA5LDcgKzY2NjksNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01MDMyLDE0ICs2NjkyLDE0IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorIAkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorIAkgIGNhc2UgJGhvc3QgaW4KKy0JICAqY3lnd2luKiB8ICptaW5ndyopCisrCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKyAJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorLQkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKyAJICAgICAgbmVlZF9yZWxpbms9bm8KKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKy0JICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisgCSAgICAgIG5lZWRfcmVsaW5rPXllcworIAkgICAgZmkKKyAJICAgIDs7CitAQCAtNTA1Niw3ICs2NzE2LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGZpCisgCSAgZG9uZQorIAkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCistCSAgICAkRUNITworKwkgICAgZWNobworIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorIAkgICAgZWxzZQorQEAgLTUwNzQsNyArNjczNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTA4Myw3ICs2NzQzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTEwMiw3ICs2NzYyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorIAkgICAgICAjIGJsZWggd2luZG93cworIAkgICAgICBjYXNlICRob3N0IGluCistCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqKQorKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCisgCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKyAJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorIAkJdmVyc3VmZml4PSItJG1ham9yIgorQEAgLTUxMzcsNyArNjc5Nyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBsaW5rbGliPSRuZXdsaWIKKyAJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKyAKKy0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTUxNTksOSArNjgxOSw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorIAkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKyAJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgorLQkJCSAgJEVDSE8KKy0JCQkgICRFQ0hPICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKy0JCQkgICRFQ0hPICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKysJCQkgIGVjaG8KKysJCQkgIGVjaG8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorKwkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCisgCQkJZWxzZQorIAkJCSAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKyAJCQlmaQorQEAgLTUxODgsMTIgKzY4NDgsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorIAkJYWRkPSIkZGlyLyRsaW5rbGliIgorIAkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorLQkJYWRkX2Rpcj0iLUwkZGlyIgorKwkJYWRkX2Rpcj0iLUwkYWJzZGlyIgorIAkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorIAkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCSAgY2FzZSAkbGliZGlyIGluCisgCQkgICAgW1xcL10qKQorLQkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgICAgOzsKKyAJCSAgZXNhYworIAkJZmkKK0BAIC01MjE1LDcgKzY4NzUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisgCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKyAJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CistCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorQEAgLTUyMjksMTMgKzY4ODksMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKyAJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisgCQkqIjokbGliZGlyOiIqKSA7OworLQkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisrCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICBmaQorIAorLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTUyNDksNyArNjkwOSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorIAkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorIAkgICAgICAqIjokbGliZGlyOiIqKSA7OworLQkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICBhZGQ9Ii1sJG5hbWUiCisgCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCitAQCAtNTI2Niw3ICs2OTI2LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICA7OworIAkJZXNhYworIAkgICAgICBmaQorQEAgLTUzMDEsMjEgKzY5NjEsMjEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKyAJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorLQkgICAgJEVDSE8KKysJICAgIGVjaG8KKyAJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKy0JICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorLQkgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCistCSAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKysJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisrCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorKwkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKyAJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCistCSAgICAgICRFQ0hPICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCistCSAgICAgICRFQ0hPICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKy0JICAgICAgJEVDSE8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKysJICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKysJICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorIAkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorLQkJJEVDSE8KKy0JCSRFQ0hPICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKy0JCSRFQ0hPICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorLQkJJEVDSE8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKy0JCSRFQ0hPICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKysJCWVjaG8KKysJCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKysJCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKysJCWVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorIAkgICAgICBmaQorIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKyAJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKK0BAIC01MzQzLDM3ICs3MDAzLDQ2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorIAkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OworLQkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CisgCQkgICBlc2FjOzsKKy0JICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCisgCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisgCSAgZmkKKyAKKy0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgorIAkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorIAkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisgCSAgdG1wX2xpYnM9CisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgY2FzZSAkZGVwbGliIGluCisrICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CisrICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKysgICAgICAgICAgICBlc2FjCisrCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisrICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKy0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBkb25lCisgCisgCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCisgCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworIAkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKwkgICAgICBwYXRoPQorIAkgICAgICBjYXNlICRkZXBsaWIgaW4KKyAJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworIAkgICAgICAqLmxhKQorKwkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisgCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKy0JCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAkJY2FzZSAkZGlyIGluCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKK0BAIC01NDAwLDggKzcwNjksOCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgICBmaQorLQkJICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorLQkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKyAJCSAgICAgIHBhdGg9CisgCQkgICAgZmkKKyAJCSAgZmkKK0BAIC01NDM0LDcgKzcxMDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisgCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgorIAllbHNlCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKysJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKyAJZmkKKyAgICAgICBmaQorICAgICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKK0BAIC01NDUxLDcgKzcxMjAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKyAJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgorIAkgICAgKiIgJGRpciAiKikgOzsKKy0JICAgICopIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCSAgbmV3bGliX3NlYXJjaF9wYXRoPQorQEAgLTU1MDksMTAgKzcxNzgsMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIC1MKikKKyAJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisgCSAgICAgICoiICRkZXBsaWIgIiopIDs7CistCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CistCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCitAQCAtNTUyOCw3ICs3MTk3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICA7OworIAllc2FjCisgCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKy0JICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCisgCWZpCisgICAgICAgZG9uZQorICAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKK0BAIC01NTY5LDcgKzcyMzgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCistICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgorICAgICAgIDs7CisgCisgICAgIGxpYikKK0BAIC01NjAyLDEwICs3MjcxLDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKKyAJZWxzZQorLQkgICRFQ0hPCisrCSAgZWNobworIAkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKyAJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKy0JICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKysJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCisgCWZpCisgICAgICAgZmkKKyAKK0BAIC01NjY0LDEzICs3MzMzLDE0IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKyAJICAjCisgCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisrCSAgIyBjb3JyZWN0IGxpbnV4IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisgCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisgCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorIAkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorIAkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisgCSAgICA7OworLQkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKysJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8cW54fHN1bm9zKQorIAkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKyAJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorIAkgICAgYWdlPSIwIgorQEAgLTU3ODMsNyArNzQ1Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorIAkgIDs7CisgCistCWxpbnV4KQorKwlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKyAJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisgCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCitAQCAtNTgwNiw3ICs3NDc2LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBkb25lCisgCisgCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorLQkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisrCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JHtjdXJyZW50fS4wIgorIAkgIDs7CisgCisgCXFueCkKK0BAIC01ODc0LDE3ICs3NTQ0LDE3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZmkKKyAKKyAgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKy0gICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAKKy0gICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKyAJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisgCXJlbW92ZWxpc3Q9CisgCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCisgCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKyAJICBjYXNlICRwIGluCistCSAgICAqLiRvYmpleHQpCisrCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCisgCSAgICAgICA7OworIAkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKKyAJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorQEAgLTU4OTMsNyArNzU2Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICBjb250aW51ZQorIAkJIGZpCisgCSAgICAgICBmaQorLQkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisrCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisgCSAgICAgICA7OworIAkgICAgKikgOzsKKyAJICBlc2FjCitAQCAtNTkwNCwyNyArNzU3NCwyOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCistCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisrCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorIAorIAkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCistCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisrCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorICAgICAgIGZpCisgCisgICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKy0gICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIlgkbGliX3NlYXJjaF9wYXRoICIgfCAkWHNlZCAtZSAicyUgJHBhdGggJSAlZyJgCistICAgICAgIwlkZXBsaWJzPWAkRUNITyAiWCRkZXBsaWJzICIgfCAkWHNlZCAtZSAicyUgLUwkcGF0aCAlICVnImAKKy0gICAgICAjCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIlgkZGVwZW5kZW5jeV9saWJzICIgfCAkWHNlZCAtZSAicyUgLUwkcGF0aCAlICVnImAKKysgICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIiRsaWJfc2VhcmNoX3BhdGggIiB8ICRTRUQgInMlICRwYXRoICUgJWciYAorKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICAjZG9uZQorIAorICAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisgCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKyAJdGVtcF94cnBhdGg9CisgCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKy0JICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKyAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KK0BAIC01OTM4LDcgKzc2MDksNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworIAljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorIAkqIiAkbGliICIqKSA7OworLQkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAKK0BAIC01OTQ4LDE5ICs3NjE5LDE5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisgCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKyAJKiIgJGxpYiAiKikgOzsKKy0JKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgCisgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorIAkgIGNhc2UgJGhvc3QgaW4KKy0JICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKikKKysJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKyAJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKyAJICAgIDs7CisgCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKy0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisgCSAgICA7OworIAkgICotKi1uZXRic2QqKQorIAkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCitAQCAtNTk3Nyw3ICs3NjQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAqKQorIAkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKyAJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKy0JICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorIAkgICAgZmkKKyAJICAgIDs7CisgCSAgZXNhYworQEAgLTYwMjYsNyArNzY5Nyw3IEBAIEVPRgorIAkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSAgKiIgJGkgIiopCistCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgIGk9IiIKKyAJCSAgICA7OworIAkJICBlc2FjCitAQCAtNjAzNywyMSArNzcwOCwyMSBAQCBFT0YKKyAJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKyAJCSAgZGVwbGliX21hdGNoPSQxCisgCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKy0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgIGVsc2UKKyAJCSAgICBkcm9wcGVkZGVwcz15ZXMKKy0JCSAgICAkRUNITworKwkJICAgIGVjaG8KKyAJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCistCQkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCistCQkgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCistCQkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKy0JCSAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorLQkJICAgICRFQ0hPICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisrCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKysJCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorKwkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKysJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisrCQkgICAgZWNobyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorIAkJICBmaQorIAkJZmkKKyAJCTs7CisgCSAgICAgICopCistCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC02MDY5LDcgKzc3NDAsNyBAQCBFT0YKKyAJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAgICoiICRpICIqKQorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgICBpPSIiCisgCQkgICAgICA7OworIAkJICAgIGVzYWMKK0BAIC02MDgwLDI5ICs3NzUxLDI5IEBAIEVPRgorIAkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisgCQkgICAgZGVwbGliX21hdGNoPSQxCisgCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgZWxzZQorIAkJICAgICAgZHJvcHBlZGRlcHM9eWVzCistCQkgICAgICAkRUNITworKwkJICAgICAgZWNobworIAkJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorLQkJICAgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCistCQkgICAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKy0JCSAgICAgICRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCistCQkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCistCQkgICAgICAkRUNITyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorKwkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKysJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisrCQkgICAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisrCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKysJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKyAJCSAgICBmaQorIAkJICBmaQorIAkJZWxzZQorIAkJICBkcm9wcGVkZGVwcz15ZXMKKy0JCSAgJEVDSE8KKysJCSAgZWNobworIAkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorLQkJICAkRUNITyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorLQkJICAkRUNITyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKKy0JCSAgJEVDSE8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisrCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKysJCSAgZWNobyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKKysJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKyAJCWZpCisgCQk7OworIAkgICAgICAqKQorLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtNjExOSwxNSArNzc5MCwyNyBAQCBFT0YKKyAJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisgCQkqIiAkYV9kZXBsaWIgIiopCistCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCSAgYV9kZXBsaWI9IiIKKyAJCSAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKyAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKyAJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KKysJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKKysJCWVsc2UKKysJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKKysJCWZpCisrCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCistCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKKysJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisrCQkgICAgJG5vY2FzZWdsb2IKKysJCSAgZWxzZQorKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgZmkKKyAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworIAkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KKyAJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CitAQCAtNjE0NCwxMyArNzgyNywxMyBAQCBFT0YKKyAJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisgCQkJY2FzZSAkcG90bGlibGluayBpbgorIAkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworLQkJCSopIHBvdGxpYj1gJEVDSE8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKysJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworIAkJCWVzYWMKKyAJCSAgICAgIGRvbmUKKyAJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisgCQkJICRTRUQgLWUgMTBxIHwKKyAJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCQlhX2RlcGxpYj0iIgorIAkJCWJyZWFrIDIKKyAJCSAgICAgIGZpCitAQCAtNjE1OSwxMiArNzg0MiwxMiBAQCBFT0YKKyAJICAgICAgZmkKKyAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKyAJCWRyb3BwZWRkZXBzPXllcworLQkJJEVDSE8KKysJCWVjaG8KKyAJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKy0JCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorLQkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCistCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorLQkJJEVDSE8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisrCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKysJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKysJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisgCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKyAJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKyAJCWVsc2UKK0BAIC02MTc1LDcgKzc4NTgsNyBAQCBFT0YKKyAJICAgICAgOzsKKyAJICAgICopCisgCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCistCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorQEAgLTYxOTEsNyArNzg3NCw3IEBAIEVPRgorIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSoiICRhX2RlcGxpYiAiKikKKy0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICBhX2RlcGxpYj0iIgorIAkJICA7OworIAkJZXNhYworQEAgLTYyMDIsOSArNzg4NSw5IEBAIEVPRgorIAkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKyAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworIAkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CistCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFhzZWQgLWUgMTBxIHwgXAorKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisgCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgICAgICBhX2RlcGxpYj0iIgorIAkJICAgICAgYnJlYWsgMgorIAkJICAgIGZpCitAQCAtNjIxMywxMiArNzg5NiwxMiBAQCBFT0YKKyAJICAgICAgZmkKKyAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKyAJCWRyb3BwZWRkZXBzPXllcworLQkJJEVDSE8KKysJCWVjaG8KKyAJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKy0JCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorLQkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCistCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorLQkJJEVDSE8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisrCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKysJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKysJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisgCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKyAJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKyAJCWVsc2UKK0BAIC02MjI5LDMyICs3OTEyLDMyIEBAIEVPRgorIAkgICAgICA7OworIAkgICAgKikKKyAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKy0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkgICAgICA7OworIAkgICAgZXNhYworIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisgCSAgOzsKKyAJbm9uZSB8IHVua25vd24gfCAqKQorIAkgIG5ld2RlcGxpYnM9IiIKKy0JICB0bXBfZGVwbGlicz1gJEVDSE8gIlggJGRlcGxpYnMiIHwgJFhzZWQgXAorLQkgICAgICAtZSAncy8gLWxjJC8vJyAtZSAncy8gLVtMUl1bXiBdKi8vZydgCisrCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKKyAJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbworIAkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCistCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiWCAkdG1wX2RlcGxpYnMiIHwgJFhzZWQgLWUgInMsJGksLCJgCisrCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzLCRpLCwiYAorIAkgICAgZG9uZQorIAkgIGZpCistCSAgaWYgJEVDSE8gIlggJHRtcF9kZXBsaWJzIiB8ICRYc2VkIC1lICdzL1sJIF0vL2cnIHwKKy0JICAgICAkR1JFUCAuID4vZGV2L251bGw7IHRoZW4KKy0JICAgICRFQ0hPCisrCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKysJICAqWyFcCVwgXSopCisrCSAgICBlY2hvCisgCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKy0JICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKysJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorIAkgICAgZWxzZQorLQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKysJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKyAJICAgIGZpCistCSAgICAkRUNITyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisrCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKyAJICAgIGRyb3BwZWRkZXBzPXllcworLQkgIGZpCisrCSAgICA7OworKwkgIGVzYWMKKyAJICA7OworIAllc2FjCisgCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKK0BAIC02MjY2LDIzICs3OTQ5LDIzIEBAIEVPRgorIAljYXNlICRob3N0IGluCisgCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKyAJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCistCSAgbmV3ZGVwbGlicz1gJEVDSE8gIlggJG5ld2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKysJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKyAJICA7OworIAllc2FjCisgCisgCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKyAJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorLQkgICAgJEVDSE8KKy0JICAgICRFQ0hPICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKysJICAgIGVjaG8KKysJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorIAkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorLQkgICAgJEVDSE8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorLQkgICAgJEVDSE8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKysJICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorKwkgICAgZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorIAkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKy0JICAgICAgJEVDSE8KKy0JICAgICAgJEVDSE8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorLQkgICAgICAkRUNITyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKy0JICAgICAgJEVDSE8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKy0JICAgICAgJEVDSE8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorKwkgICAgICBlY2hvCisrCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorKwkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisrCSAgICAgIGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorIAkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorQEAgLTYyOTIsMTYgKzc5NzUsMTYgQEAgRU9GCisgCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICAkRUNITyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKy0JICAgICRFQ0hPICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgorLQkgICAgJEVDSE8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKysJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisrCSAgICBlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgorKwkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorIAorIAkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgorLQkgICAgICAkRUNITworLQkgICAgICAkRUNITyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKy0JICAgICAgJEVDSE8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgorLQkgICAgICAkRUNITyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorLQkgICAgICAkRUNITyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKysJICAgICAgZWNobworKwkgICAgICBlY2hvICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgorKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKysJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorKwkgICAgICBlY2hvICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgorIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKyAJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisgCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCitAQCAtNjMxOCw5ICs4MDAxLDkgQEAgRU9GCisgICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorICAgICAgIGNhc2UgJGhvc3QgaW4KKyAJKi0qLWRhcndpbiopCistCSAgbmV3ZGVwbGlicz1gJEVDSE8gIlggJG5ld2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCistCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKy0JICBkZXBsaWJzPWAkRUNITyAiWCAkZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKysJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisrCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisrCSAgZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorIAkgIDs7CisgICAgICAgZXNhYworIAorQEAgLTYzMzMsNyArODAxNiw3IEBAIEVPRgorIAkqKQorIAkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisgCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisrCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTYzNDMsMTAgKzgwMjYsMTAgQEAgRU9GCisgCS1MKikKKyAJICBjYXNlICIgJG5ld19saWJzICIgaW4KKyAJICAqIiAkZGVwbGliICIqKSA7OworLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgZXNhYworIAkgIDs7CistCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorICAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKK0BAIC02MzU4LDE1ICs4MDQxLDIyIEBAIEVPRgorIAorICAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorKwkjIFJlbW92ZSAke3dsfSBpbnN0YW5jZXMgd2hlbiBsaW5raW5nIHdpdGggbGQuCisrCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KKysJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisrCSAgKlwkTERcICopIHdsPSA7OworKyAgICAgICAgZXNhYworIAlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorIAkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAJICBoYXJkY29kZV9saWJkaXJzPQorIAkgIGRlcF9ycGF0aD0KKyAJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorLQkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorIAkJZWxzZQorQEAgLTYzNzUsMTggKzgwNjUsMTggQEAgRU9GCisgCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCSAgICA7OworIAkJICAqKQorLQkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCSAgICA7OworIAkJICBlc2FjCisgCQlmaQorIAkgICAgICBlbHNlCisgCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisrCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGRvbmUKK0BAIC02Mzk0LDE3ICs4MDg0LDEzIEBAIEVPRgorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorIAkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKy0JICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgorLQkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIKKy0JICAgIGVsc2UKKy0JICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmaQorKwkgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAJICBmaQorIAkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisgCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgICAgcnBhdGg9CisgCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKyAJICAgIGRvbmUKKyAJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorIAkgIGZpCitAQCAtNjQxMiw3ICs4MDk4LDcgQEAgRU9GCisgCWZpCisgCisgCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKy0JdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisrCXRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKyAJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KKyAJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisgCWZpCitAQCAtNjQzOCwyMyArODEyNCwyMyBAQCBFT0YKKyAJbGlua25hbWVzPQorIAlmb3IgbGluaworIAlkbworLQkgIGxpbmtuYW1lcz0iJGxpbmtuYW1lcyAkbGluayIKKysJICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKKyAJZG9uZQorIAorIAkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworLQl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKysJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorIAl0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAorIAlkZWxmaWxlcz0KKyAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKyAJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyIKKysJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKyAJZmkKKyAKKyAJb3JpZ19leHBvcnRfc3ltYm9scz0KKyAJY2FzZSAkaG9zdF9vcyBpbgorLQljeWd3aW4qIHwgbWluZ3cqKQorKwljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorIAkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisgCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KK0BAIC02NDgwLDEzICs4MTY2LDQ1IEBAIEVPRgorIAkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKyAJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKysJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbworIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKKy0JICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKy0JICAgICAgZnVuY19sZW4gIiAkY21kIgorLQkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorLQkgICAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKysJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKKysJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisrCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisrCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCisrCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKysJCSAgZnVuY19sZW4gIiAkY21kIgorKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorKwkJICA7OworKwkJKikKKysJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKysJCSAgOzsKKysJICAgICAgZXNhYworKwkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKKysJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisrCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQorKwkgICAgICB0aGVuCisrCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisrCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKysJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisrCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisrCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKysJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKysJCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQorKwkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKysJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKysJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKysJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkJZG9uZSA+ICIkb3V0cHV0IgorKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisgCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisrCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisrCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKyAJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisgCSAgICAgIGVsc2UKKyAJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorQEAgLTY1MDgsNyArODIyNiw3IEBAIEVPRgorIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisgCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisgCWZpCisgCisgCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCitAQCAtNjUyMCw3ICs4MjM4LDcgQEAgRU9GCisgCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKyAJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorIAkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorLQkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKysJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisgCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisgCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKyAJZmkKK0BAIC02NTMwLDcgKzgyNDgsNyBAQCBFT0YKKyAJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKyAJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisgCSAgKikKKy0JICAgIHRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCisgCSAgICA7OworIAkgIGVzYWMKKyAJZG9uZQorQEAgLTY1NTAsMjEgKzgyNjgsMjEgQEAgRU9GCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGVsc2UKKyAJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKy0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBmaQorIAlmaQorIAorIAlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisgCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgorIAlmaQorIAorIAkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKy0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisgCWZpCisgCitAQCAtNjYwOSw3ICs4MzI3LDggQEAgRU9GCisgCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKyAJICBmaQorIAkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKy0JICBvdXRwdXRfbGE9YCRFQ0hPICJYJG91dHB1dCIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKysJICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorKwkgIG91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAKKyAJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorIAkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KK0BAIC02NjIyLDEzICs4MzQxLDE2IEBAIEVPRgorIAkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorIAkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgorLQkgICAgJEVDSE8gJ0lOUFVUICgnID4gJG91dHB1dAorKwkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CisgCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKyAJICAgIGRvCistCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisrCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorIAkgICAgZG9uZQorLQkgICAgJEVDSE8gJyknID4+ICRvdXRwdXQKKy0JICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorIAkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorQEAgLTY2NDIsMTAgKzgzNjQsMTIgQEAgRU9GCisgCSAgICBmaQorIAkgICAgZm9yIG9iagorIAkgICAgZG8KKy0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisgCSAgICBkb25lCistCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCistCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisgCSAgZWxzZQorIAkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKyAJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKK0BAIC02NjY5LDE3ICs4MzkzLDE5IEBAIEVPRgorIAkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgorIAkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisgCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKy0JCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorKwkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CisrCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCisgCQkgIGVsc2UKKyAJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorIAkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCistCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmp+XCRSTSAkbGFzdF9yb2JqXCIKKysJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKyAJCSAgZmkKKyAJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisgCQkgIGZ1bmNfYXJpdGggJGsgKyAxCisgCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisgCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorLQkJICBvYmpsaXN0PSRvYmoKKysJCSAgb2JqbGlzdD0iICRvYmoiCisgCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKyAJCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKKyAJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorQEAgLTY2ODksMTEgKzg0MTUsMTIgQEAgRU9GCisgCSAgICAgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0CisgCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKy0JICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKysJICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorIAkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKyAJICAgICAgZmkKKy0JICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisgCisgCSAgICBlbHNlCisgCSAgICAgIG91dHB1dD0KK0BAIC02NzI3LDcgKzg0NTQsNyBAQCBFT0YKKyAJCWx0X2V4aXQ9JD8KKyAKKyAJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisgCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisgCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKyAJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTY3NDgsNyArODQ3NSw3IEBAIEVPRgorIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKyAJICAgIGZpCisgCisgCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KK0BAIC02NzYwLDcgKzg0ODcsNyBAQCBFT0YKKyAJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKyAJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKyAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCistCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKysJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorIAkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKyAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGZpCitAQCAtNjgwMSwxMCArODUyOCwxMCBAQCBFT0YKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAlmaQorIAorQEAgLTY4MjAsNyArODU0Nyw3IEBAIEVPRgorIAkgICAgbHRfZXhpdD0kPworIAorIAkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKyAJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorIAkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKK0BAIC02ODMyLDcgKzg1NTksNyBAQCBFT0YKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCisgCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKyAKKyAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCitAQCAtNjkxMywxOCArODY0MCwyMSBAQCBFT0YKKyAgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisgCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKyAJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKy0JICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICJYJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRYc2VkIC1lICdzfCx8IHxnJ2AKKysJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisgCWVsc2UKKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKyAJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCWZpCisgICAgICAgZmkKKyAKKysgICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcworKyAgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBsaWJvYmpzPSIkbm9uX3BpY19vYmplY3RzIgorKworICAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorLSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0kJy9kJyAtZSAnL1wubGliJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorKyAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorIAorICAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKK0BAIC02OTg0LDggKzg3MTQsOCBAQCBFT0YKKyAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworLQljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKy0JZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKysJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKyAJOzsKKyAgICAgICBlc2FjCisgCitAQCAtNjk5NiwxNCArODcyNiwxNCBAQCBFT0YKKyAJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorIAkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKyAJICAgIDEwLlswMTIzXSkKKy0JICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKy0JICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisgCSAgICA7OworIAkgIGVzYWMKKyAJZmkKKyAJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorLQljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCistCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICJYICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisgCTs7CisgICAgICAgZXNhYworIAorQEAgLTcwMTcsNyArODc0Nyw3IEBAIEVPRgorIAkqKQorIAkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKyAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCistCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKysJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzAyNywxNyArODc1NywxNyBAQCBFT0YKKyAJLUwqKQorIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorIAkgICoiICRkZXBsaWIgIiopIDs7CistCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJICBlc2FjCisgCSAgOzsKKy0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisgCisgCistICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCistICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZpbmFsaXplX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisgCisgICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKyAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorQEAgLTcwNDUsNyArODc3NSw3IEBAIEVPRgorIAkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKyAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAgICAgICBmaQorQEAgLTcwNjQsMzAgKzg3OTQsMzIgQEAgRU9GCisgCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCTs7CisgCSAgICAgICopCistCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorIAkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCWNhc2UgJGhvc3QgaW4KKy0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisrCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRsaWJkaXI6IiopIDs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzExMywxOCArODg0NSwxOCBAQCBFT0YKKyAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJOzsKKyAJICAgICAgKikKKy0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCisgCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAgICAgICBkb25lCitAQCAtNzEzOCw4ICs4ODcwLDggQEAgRU9GCisgCisgICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorLQljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorLQlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisrCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgIGZpCisgCisgICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCitAQCAtNzE1MSw2ICs4ODgzLDEwIEBAIEVPRgorIAorICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgIGNhc2UgJGhvc3QgaW4KKysgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCisrICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKysgICAgICAgIDs7CisgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworQEAgLTcxNjQsMTMgKzg5MDAsMTkgQEAgRU9GCisgICAgICAgZXNhYworICAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorIAkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCistCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisgCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorIAorIAkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KKyAJZXhpdF9zdGF0dXM9MAorIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworIAorKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisrCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysJZmkKKysKKyAJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKyAJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorIAkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCitAQCAtNzE5Myw3ICs4OTM1LDcgQEAgRU9GCisgCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICBycGF0aD0KKyAJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgIGRvbmUKKyAJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisgCWZpCitAQCAtNzIwMSw3ICs4OTQzLDcgQEAgRU9GCisgCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICBycGF0aD0KKyAJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgIGRvbmUKKyAJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorIAlmaQorQEAgLTcyMTEsMTEgKzg5NTMsMTggQEAgRU9GCisgCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKyAJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisgCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKy0JbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisrCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKyAJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KKyAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisgCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisrCisrCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKwlmaQorKworIAlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgICBmaQorIAorQEAgLTcyMzAsNyArODk3OSw3IEBAIEVPRgorIAlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorIAkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisgCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKy0JICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorIAkgIGVsc2UKKyAJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcworIAkgICAgcmVsaW5rX2NvbW1hbmQ9CitAQCAtNzI0MiwxMyArODk5MSwxOSBAQCBFT0YKKyAgICAgICBmaQorIAorICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKy0gICAgICBsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisrICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKyAKKyAgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KKyAgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKyAKKyAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisgCisrICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKKysJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysgICAgICBmaQorKworICAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorIAorQEAgLTcyNjYsMTggKzkwMjEsNyBAQCBFT0YKKyAJICBmaQorIAlkb25lCisgCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCistCXJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCistICAgICAgZmkKKy0KKy0gICAgICAjIFF1b3RlICRFQ0hPIGZvciBzaGlwcGluZy4KKy0gICAgICBpZiB0ZXN0ICJYJEVDSE8iID0gIlgkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKy0JY2FzZSAkcHJvZ3BhdGggaW4KKy0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBxZWNobz0iJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKKy0JKikgcWVjaG89IiRTSEVMTCBgcHdkYC8kcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjs7CistCWVzYWMKKy0JcWVjaG89YCRFQ0hPICJYJHFlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKy0gICAgICBlbHNlCistCXFlY2hvPWAkRUNITyAiWCRFQ0hPIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICAgZmkKKyAKKyAgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCitAQCAtNzMwOCwxMSArOTA1MiwxMCBAQCBFT0YKKyAKKyAJICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKKyAKKy0JICAgICMgd2Ugc2hvdWxkIHJlYWxseSB1c2UgYSBidWlsZC1wbGF0Zm9ybSBzcGVjaWZpYyBjb21waWxlcgorLQkgICAgIyBoZXJlLCBidXQgT1RPSCwgdGhlIHdyYXBwZXJzIChzaGVsbCBzY3JpcHQgYW5kIHRoaXMgQyBvbmUpCistCSAgICAjIGFyZSBvbmx5IHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBleGVjdXRlIHRoZSAicmVhbCIgYmluYXJ5LgorLQkgICAgIyBTaW5jZSB0aGUgInJlYWwiIGJpbmFyeSBpcyBidWlsdCBmb3IgJGhvc3QsIHRoZW4gdGhpcworLQkgICAgIyB3cmFwcGVyIG1pZ2h0IGFzIHdlbGwgYmUgYnVpbHQgZm9yICRob3N0LCB0b28uCisrCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAorKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisrCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCisrCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworIAkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorIAkgICAgICAkU1RSSVAgJGN3cmFwcGVyCitAQCAtNzM1OCw3ICs5MTAxLDcgQEAgRU9GCisgCWVsc2UKKyAJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKyAJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCistCSAgICBvbGRvYmpzPSIkb2xkb2JqcyAkc3ltZmlsZW9iaiIKKysJICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKyAJICBmaQorIAlmaQorIAlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorQEAgLTczNjYsMTAgKzkxMDksMTAgQEAgRU9GCisgCisgICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisgCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworLQlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgIGZpCisgCisgICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCitAQCAtNzM4MCwxMCArOTEyMywxMCBAQCBFT0YKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJZmkKKyAKKyAJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCitAQCAtNzM5OSw5ICs5MTQyLDkgQEAgRU9GCisgCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAJICA6CisgCWVsc2UKKy0JICAkRUNITyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorIAkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworIAkgIG9sZG9ianM9CitAQCAtNzQyNSwxOCArOTE2OCwzMCBAQCBFT0YKKyAJCWVzYWMKKyAJICAgICAgZG9uZQorIAkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCistCSAgICAgIG9sZG9ianM9IiRvbGRvYmpzICRnZW50b3AvJG5ld29iaiIKKysJICAgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRnZW50b3AvJG5ld29iaiIKKyAJICAgICAgOzsKKy0JICAgICopIG9sZG9ianM9IiRvbGRvYmpzICRvYmoiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJG9iaiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCWZpCisrCWZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwl0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAKKyAJZnVuY19sZW4gIiAkY21kcyIKKyAJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKyAJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisgCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisrCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorKwkgIGZvciBvYmogaW4gJG9sZG9ianMKKysJICBkbworKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKysJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworIAllbHNlCisgCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKyAJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCitAQCAtNzUxMCw3ICs5MjY1LDcgQEAgRU9GCisgICAgICAgZG9uZQorICAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorLSAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisgCXJlbGlua19jb21tYW5kPQorICAgICAgIGZpCitAQCAtNzUzMCwxMiArOTI4NSwyMyBAQCBFT0YKKyAJICAgICAgKi5sYSkKKyAJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisrCQk7OworKwkgICAgICAtTCopCisrCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLUwkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorIAkJOzsKKy0JICAgICAgKikgbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRkZXBsaWIiIDs7CisrCSAgICAgIC1SKikKKysJCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgorKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisrCQk7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCisgCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCitAQCAtNzU0OSw5ICs5MzE1LDkgQEAgRU9GCisgCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworLQkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCitAQCAtNzU2OCw3ICs5MzM0LDcgQEAgRU9GCisgCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtNzU4MCw3ICs5MzQ2LDcgQEAgRU9GCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKyAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKyAJICAgICAgZXNhYworLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorIAkgICAgbmV3ZGxwcmVmaWxlcz0KK0BAIC03NTg5LDE1ICs5MzU1LDMzIEBAIEVPRgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisgCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCisgCSAgICBkb25lCisgCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAJICBmaQorIAkgICRSTSAkb3V0cHV0CisgCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisrCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKKysJICAjIHN5c3RlbXMgdGhhdCBjYW4ndCBoYXJkLWNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHRoZWlyIGV4ZWN1dGFibGVzCisrCSAgIyBhbmQgdGhhdCBoYXZlIG5vIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUgaW5kZXBlbmRlbnQgb2YgUEFUSCwKKysJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZworKwkgICMgbGlidG9vbCB2YXJpYWJsZXMsIHNvIHdlIGhhdmUgdG8gaGFyZC1jb2RlIHRoZSBPU3MgdG8gd2hpY2ggaXQKKysJICAjIGFwcGxpZXMgaGVyZTsgYXQgdGhlIG1vbWVudCwgdGhhdCBtZWFucyBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIFBFCisrCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorKwkgICMgdGVzdHMvYmluZGlyLmF0IGZvciBmdWxsIGRldGFpbHMuCisgCSAgdGRsbmFtZT0kZGxuYW1lCisgCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCistCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwpIHRkbG5hbWU9Li4vYmluLyRkbG5hbWUgOzsKKysJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCisrCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KKysJICAgICAgaWYgdGVzdCAieCRiaW5kaXIiICE9IHggOworKwkgICAgICB0aGVuCisrCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCisrCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0JGRsbmFtZQorKwkgICAgICBlbHNlCisrCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorKwkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQorKwkgICAgICBmaQorKwkgICAgICA7OworIAkgIGVzYWMKKyAJICAkRUNITyA+ICRvdXRwdXQgIlwKKyAjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorQEAgLTc2NTYsNyArOTQ0MCw3IEBAIHJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworIH0KKyAKKy17IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorIAorIAorQEAgLTc2NzYsOSArOTQ2MCw5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZm9yIGFyZworICAgICBkbworICAgICAgIGNhc2UgJGFyZyBpbgorLSAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworLSAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CistICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisrICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgIGVzYWMKKyAgICAgZG9uZQorIAorQEAgLTc2ODcsMjQgKzk0NzEsMjMgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorICAgICBybWRpcnM9CisgCistICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCistCW9iamRpcj0iJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRvYmpkaXIiCisgICAgICAgZWxzZQorLQlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRkaXIvJG9iamRpciIKKyAgICAgICBmaQorICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0gICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorKyAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKKyAKKy0gICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCistICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKysgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgorIAljYXNlICIgJHJtZGlycyAiIGluCistCSAgKiIgJG9iamRpciAiKikgOzsKKy0JICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKysJICAqIiAkb2RpciAiKikgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKyAJZXNhYworICAgICAgIGZpCisgCitAQCAtNzczMCwxOCArOTUxMywxNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCisgCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKyAJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisgCSAgZG9uZQorLQkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorIAorLQkgIGNhc2UgIiRtb2RlIiBpbgorKwkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KKyAJICBjbGVhbikKKy0JICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgorLQkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisrCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgorIAkgICAgKiIgJGRsbmFtZSAiKikgOzsKKy0JICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKysJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OworIAkgICAgZXNhYworLQkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorIAkgICAgOzsKKyAJICB1bmluc3RhbGwpCisgCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KK0BAIC03NzY5LDE5ICs5NTUxLDE5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgorIAkgIGZpCisgCisgCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorIAkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgorIAkgIGZpCisgCWZpCisgCTs7CisgCisgICAgICAgKikKKy0JaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KKyAJICBub2V4ZW5hbWU9JG5hbWUKKyAJICBjYXNlICRmaWxlIGluCisgCSAgKi5leGUpCitAQCAtNzc5MSw3ICs5NTczLDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKyAJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCisgCSAgICA7OworIAkgIGVzYWMKKyAJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KK0BAIC03ODAwLDcgKzk1ODIsNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorIAkgICAgICByZWxpbmtfY29tbWFuZD0KKyAJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKyAJICAgIGVsc2UKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorQEAgLTc4MDgsMTIgKzk1OTAsMTIgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKyAJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKyAJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorIAkgICAgZmkKKyAJICBmaQorIAlmaQorQEAgLTc4MjEsNyArOTYwMyw2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgICBlc2FjCisgICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgIGRvbmUKKy0gICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKyAKKyAgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KK0BAIC03ODMzLDE2ICs5NjE0LDE2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyt7IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisgCistdGVzdCAteiAiJG1vZGUiICYmIHsKKyt0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorIH0KKyAKKyB0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKy0gIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgCisgaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICAgZXZhbCBleGVjICIkZXhlY19jbWQiCitkaWZmIC0tZ2l0IGEvY29uZmlnL21pc3NpbmcgYi9jb25maWcvbWlzc2luZworaW5kZXggMWM4ZmY3MC4uZGI5ODk3NCAxMDA3NTUKKy0tLSBhL2NvbmZpZy9taXNzaW5nCisrKysgYi9jb25maWcvbWlzc2luZworQEAgLTEsMTEgKzEsMTAgQEAKKyAjISAvYmluL3NoCistIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKysjIENvbW1vbiB3cmFwcGVyIGZvciBhIGZldyBwb3RlbnRpYWxseSBtaXNzaW5nIEdOVSBwcm9ncmFtcy4KKyAKKy1zY3JpcHR2ZXJzaW9uPTIwMDYtMDUtMTAuMjMKKytzY3JpcHR2ZXJzaW9uPTIwMTMtMTAtMjguMTM7ICMgVVRDCisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKy0jICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKysjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorQEAgLTE4LDkgKzE3LDcgQEAgc2NyaXB0dmVyc2lvbj0yMDA2LTA1LTEwLjIzCisgIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCistIyAwMjExMC0xMzAxLCBVU0EuCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyAjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorQEAgLTI4LDY2ICsyNSw0MCBAQCBzY3JpcHR2ZXJzaW9uPTIwMDYtMDUtMTAuMjMKKyAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKyBpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCistICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisrICBlY2hvIDE+JjIgIlRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgIGV4aXQgMQorIGZpCisgCistcnVuPToKKy1zZWRfb3V0cHV0PSdzLy4qIC0tb3V0cHV0WyA9XVwoW14gXSpcKS4qL1wxL3AnCistc2VkX21pbnVzbz0ncy8uKiAtbyBcKFteIF0qXCkuKi9cMS9wJworLQorLSMgSW4gdGhlIGNhc2VzIHdoZXJlIHRoaXMgbWF0dGVycywgYG1pc3NpbmcnIGlzIGJlaW5nIHJ1biBpbiB0aGUKKy0jIHNyY2RpciBhbHJlYWR5LgorLWlmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCistICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmFjCistZWxzZQorLSAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorLWZpCisrY2FzZSAkMSBpbgorIAorLW1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKKysgIC0taXMtbGlnaHR3ZWlnaHQpCisrICAgICMgVXNlZCBieSBvdXIgYXV0b2NvbmYgbWFjcm9zIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGF2YWlsYWJsZSBtaXNzaW5nCisrICAgICMgc2NyaXB0IGlzIG1vZGVybiBlbm91Z2guCisrICAgIGV4aXQgMAorKyAgICA7OworIAorLWNhc2UgJDEgaW4KKy0tLXJ1bikKKy0gICMgVHJ5IHRvIHJ1biByZXF1ZXN0ZWQgcHJvZ3JhbSwgYW5kIGp1c3QgZXhpdCBpZiBpdCBzdWNjZWVkcy4KKy0gIHJ1bj0KKy0gIHNoaWZ0CistICAiJEAiICYmIGV4aXQgMAorLSAgIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucworLSAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgorLSAgIyBhIGZpbGUgdGhhdCByZXF1aXJlcyBhIG1pbmltdW0gdmVyc2lvbi4gIEluIHRoaXMgY2FzZSB3ZQorLSAgIyB3ZSBzaG91bGQgcHJvY2VlZCBoYXMgaWYgdGhlIHByb2dyYW0gaGFkIGJlZW4gYWJzZW50LCBvcgorLSAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCistICBpZiB0ZXN0ICQ/ID0gNjM7IHRoZW4KKy0gICAgcnVuPToKKy0gICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorLSAgZmkKKy0gIDs7CisrICAtLXJ1bikKKysgICAgIyBCYWNrLWNvbXBhdCB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdXNlZCBieSBvbGRlciBhdXRvbWFrZS4KKysgICAgc2hpZnQKKysgICAgOzsKKyAKKyAgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICAgZWNobyAiXAorICQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorIAorLUhhbmRsZSBcYFBST0dSQU0gW0FSR1VNRU5UXS4uLicgZm9yIHdoZW4gUFJPR1JBTSBpcyBtaXNzaW5nLCBvciByZXR1cm4gYW4KKy1lcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCisrUnVuICdQUk9HUkFNIFtBUkdVTUVOVF0uLi4nLCByZXR1cm5pbmcgYSBwcm9wZXIgYWR2aWNlIHdoZW4gdGhpcyBmYWlscyBkdWUKKyt0byBQUk9HUkFNIGJlaW5nIG1pc3Npbmcgb3IgdG9vIG9sZC4KKyAKKyBPcHRpb25zOgorICAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKy0gIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworIAorIFN1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKy0gIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKy0gIGF1dG9jb25mICAgICB0b3VjaCBmaWxlIFxgY29uZmlndXJlJworLSAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKKy0gIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCistICBhdXRvbWFrZSAgICAgdG91Y2ggYWxsIFxgTWFrZWZpbGUuaW4nIGZpbGVzCistICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCistICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworLSAgaGVscDJtYW4gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQorLSAgbGV4ICAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKKy0gIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKy0gIHRhciAgICAgICAgICB0cnkgdGFyLCBnbnV0YXIsIGd0YXIsIHRoZW4gdGFyIHdpdGhvdXQgbm9uLXBvcnRhYmxlIGZsYWdzCistICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisrICBhY2xvY2FsICAgYXV0b2NvbmYgIGF1dG9oZWFkZXIgICBhdXRvbTR0ZSAgYXV0b21ha2UgIG1ha2VpbmZvCisrICBiaXNvbiAgICAgeWFjYyAgICAgIGZsZXggICAgICAgICBsZXggICAgICAgaGVscDJtYW4KKysKKytWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCisrJ2cnIGFyZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgdGhlIG5hbWUuCisgCisgU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICAgZXhpdCAkPworQEAgLTk5LDI2OSArNzAsMTQ2IEBAIFNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgICAgIDs7CisgCisgICAtKikKKy0gICAgZWNobyAxPiYyICIkMDogVW5rbm93biBcYCQxJyBvcHRpb24iCistICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKysgICAgZWNobyAxPiYyICIkMDogdW5rbm93biAnJDEnIG9wdGlvbiIKKysgICAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgIGV4aXQgMQorICAgICA7OworIAorIGVzYWMKKyAKKy0jIE5vdyBleGl0IGlmIHdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuICBBbHNvIGV4aXQgbm93IGlmIHdlCistIyBkb24ndCBoYXZlIGl0IGFuZCAtLXZlcnNpb24gd2FzIHBhc3NlZCAobW9zdCBsaWtlbHkgdG8gZGV0ZWN0CistIyB0aGUgcHJvZ3JhbSkuCistY2FzZSAkMSBpbgorLSAgbGV4fHlhY2MpCistICAgICMgTm90IEdOVSBwcm9ncmFtcywgdGhleSBkb24ndCBoYXZlIC0tdmVyc2lvbi4KKy0gICAgOzsKKy0KKy0gIHRhcikKKy0gICAgaWYgdGVzdCAtbiAiJHJ1biI7IHRoZW4KKy0gICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgorLSAgICAgICBleGl0IDEKKy0gICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKy0gICAgICAgZXhpdCAxCistICAgIGZpCistICAgIDs7CistCistICAqKQorLSAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAoJDEgLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KKy0gICAgICAgZXhpdCAxCistICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCistICAgICAgICMgQ291bGQgbm90IHJ1biAtLXZlcnNpb24gb3IgLS1oZWxwLiAgVGhpcyBpcyBwcm9iYWJseSBzb21lb25lCistICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCistICAgICAgICMgJFRPT0wgZXhpc3RzIGFuZCBub3Qga25vd2luZyAkVE9PTCB1c2VzIG1pc3NpbmcuCistICAgICAgIGV4aXQgMQorLSAgICBmaQorLSAgICA7OworLWVzYWMKKy0KKy0jIElmIGl0IGRvZXMgbm90IGV4aXN0LCBvciBmYWlscyB0byBydW4gKHBvc3NpYmx5IGFuIG91dGRhdGVkIHZlcnNpb24pLAorLSMgdHJ5IHRvIGVtdWxhdGUgaXQuCistY2FzZSAkMSBpbgorLSAgYWNsb2NhbCopCistICAgIGVjaG8gMT4mMiAiXAorLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKKy0gICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCistICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorLSAgICB0b3VjaCBhY2xvY2FsLm00CistICAgIDs7CistCistICBhdXRvY29uZikKKy0gICAgZWNobyAxPiYyICJcCistV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCistICAgICAgICAgeW91IG1vZGlmaWVkIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlCistICAgICAgICAgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUKKy0gICAgICAgICBhcmNoaXZlIHNpdGUuIgorLSAgICB0b3VjaCBjb25maWd1cmUKKy0gICAgOzsKKy0KKy0gIGF1dG9oZWFkZXIpCistICAgIGVjaG8gMT4mMiAiXAorLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjY29uZmlnLmgnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CistICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQorLSAgICAgICAgIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorLSAgICBmaWxlcz1gc2VkIC1uICdzL15bIF0qQVtDTV1fQ09ORklHX0hFQURFUihcKFteKV0qXCkpLiovXDEvcCcgJHtjb25maWd1cmVfYWN9YAorLSAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKKy0gICAgdG91Y2hfZmlsZXM9CistICAgIGZvciBmIGluICRmaWxlczsgZG8KKy0gICAgICBjYXNlICRmIGluCistICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKKy0JCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OworLSAgICAgICopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgJGYuaW4iOzsKKy0gICAgICBlc2FjCistICAgIGRvbmUKKy0gICAgdG91Y2ggJHRvdWNoX2ZpbGVzCistICAgIDs7CistCistICBhdXRvbWFrZSopCistICAgIGVjaG8gMT4mMiAiXAorLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KKy0gICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4KKy0gICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCistICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8CistCSAgIHNlZCAncy9cLmFtJC8uaW4vJyB8CistCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQorLSAgICA7OworLQorLSAgYXV0b200dGUpCistICAgIGVjaG8gMT4mMiAiXAorLVdBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCistICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKKy0gICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4KKy0gICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCistCistICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCistICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorLQl0b3VjaCAkZmlsZQorLSAgICBlbHNlCistCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorLQllY2hvICIjISAvYmluL3NoIgorLQllY2hvICIjIENyZWF0ZWQgYnkgR05VIEF1dG9tYWtlIG1pc3NpbmcgYXMgYSByZXBsYWNlbWVudCBvZiIKKy0JZWNobyAiIyAgJCAkQCIKKy0JZWNobyAiZXhpdCAwIgorLQljaG1vZCAreCAkZmlsZQorLQlleGl0IDEKKy0gICAgZmkKKy0gICAgOzsKKy0KKy0gIGJpc29ufHlhY2MpCistICAgIGVjaG8gMT4mMiAiXAorLVdBUk5JTkc6IFxgJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKKy0gICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CistICAgICAgICAgXGBCaXNvbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCistICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAorLSAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCistICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKy0JY2FzZSAkTEFTVEFSRyBpbgorLQkqLnkpCistCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAorLQkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCistCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuYworLQkgICAgZmkKKy0JICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCistCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKy0JICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCistCSAgICBmaQorLQkgIDs7CistCWVzYWMKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAhIC1mIHkudGFiLmg7IHRoZW4KKy0JZWNobyA+eS50YWIuaAorLSAgICBmaQorLSAgICBpZiB0ZXN0ICEgLWYgeS50YWIuYzsgdGhlbgorLQllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPnkudGFiLmMKKy0gICAgZmkKKy0gICAgOzsKKy0KKy0gIGxleHxmbGV4KQorLSAgICBlY2hvIDE+JjIgIlwKKy1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKy0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKy0gICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CistICAgICAgICAgXGBGbGV4JyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKy0gICAgcm0gLWYgbGV4Lnl5LmMKKy0gICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorLSAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCistCWNhc2UgJExBU1RBUkcgaW4KKy0JKi5sKQorLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL2wkL2MvJ2AKKy0JICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorLQkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIGxleC55eS5jCistCSAgICBmaQorLQkgIDs7CistCWVzYWMKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCistCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+bGV4Lnl5LmMKKy0gICAgZmkKKy0gICAgOzsKKy0KKy0gIGhlbHAybWFuKQorLSAgICBlY2hvIDE+JjIgIlwKKy1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKy0JIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKKy0JIFxgSGVscDJtYW4nIHBhY2thZ2UgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZQorLQkgZWZmZWN0LiAgWW91IGNhbiBnZXQgXGBIZWxwMm1hbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCistCistICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCistICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorLQl0b3VjaCAkZmlsZQorLSAgICBlbHNlCistCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorLQllY2hvICIuYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlIgorLQlleGl0IDEKKy0gICAgZmkKKy0gICAgOzsKKy0KKy0gIG1ha2VpbmZvKQorLSAgICBlY2hvIDE+JjIgIlwKKy1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKy0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC50ZXhpJyBvciBcYC50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQorLSAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworLSAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCistICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBUZXhpbmZvJyBwYWNrYWdlIG9yCistICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKy0gICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgorLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKKy0gICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorLSAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KKy0gICAgICAjIC4uLiBvciBpdCBpcyB0aGUgb25lIHNwZWNpZmllZCB3aXRoIEBzZXRmaWxlbmFtZSAuLi4KKy0gICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKy0gICAgICBmaWxlPWBzZWQgLW4gJworLQkvXkBzZXRmaWxlbmFtZS97CistCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCistCSAgcAorLQkgIHEKKy0JfScgJGluZmlsZWAKKy0gICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQorLSAgICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkaW5maWxlIiB8IHNlZCAncywuKi8sLDtzLC5bXi5dKiQsLCdgLmluZm8KKy0gICAgZmkKKy0gICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOworLSAgICAjIGxldCdzIGZhaWwgd2l0aG91dCB0b3VjaGluZyBhbnl0aGluZy4KKy0gICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKy0gICAgdG91Y2ggJGZpbGUKKy0gICAgOzsKKy0KKy0gIHRhcikKKy0gICAgc2hpZnQKKy0KKy0gICAgIyBXZSBoYXZlIGFscmVhZHkgdHJpZWQgdGFyIGluIHRoZSBnZW5lcmljIHBhcnQuCistICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgorLSAgICAjIG1lc3NhZ2VzLgorLSAgICBpZiAoZ251dGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorLSAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKKy0gICAgZmkKKy0gICAgaWYgKGd0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCistICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKKy0gICAgZmkKKy0gICAgZmlyc3Rhcmc9IiQxIgorLSAgICBpZiBzaGlmdDsgdGhlbgorLQljYXNlICRmaXJzdGFyZyBpbgorLQkqbyopCistCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL28vL2AKKy0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorLQkgICAgOzsKKy0JZXNhYworLQljYXNlICRmaXJzdGFyZyBpbgorLQkqaCopCistCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL2gvL2AKKy0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorLQkgICAgOzsKKy0JZXNhYworLSAgICBmaQorLQorLSAgICBlY2hvIDE+JjIgIlwKKy1XQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKy0gICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQorLSAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIgorLSAgICBleGl0IDEKKy0gICAgOzsKKy0KKy0gICopCistICAgIGVjaG8gMT4mMiAiXAorLVdBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYW5kIGlzICRtc2cuCistICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKKy0gICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSBcYFJFQURNRScgZmlsZSwKKy0gICAgICAgICBpdCBvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nCistICAgICAgICAgdGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIGNhc2UKKy0gICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCistICAgIGV4aXQgMQorLSAgICA7OworLWVzYWMKKysjIFJ1biB0aGUgZ2l2ZW4gcHJvZ3JhbSwgcmVtZW1iZXIgaXRzIGV4aXQgc3RhdHVzLgorKyIkQCI7IHN0PSQ/CisrCisrIyBJZiBpdCBzdWNjZWVkZWQsIHdlIGFyZSBkb25lLgorK3Rlc3QgJHN0IC1lcSAwICYmIGV4aXQgMAorKworKyMgQWxzbyBleGl0IG5vdyBpZiB3ZSBpdCBmYWlsZWQgKG9yIHdhc24ndCBmb3VuZCksIGFuZCAnLS12ZXJzaW9uJyB3YXMKKysjIHBhc3NlZDsgc3VjaCBhbiBvcHRpb24gaXMgcGFzc2VkIG1vc3QgbGlrZWx5IHRvIGRldGVjdCB3aGV0aGVyIHRoZQorKyMgcHJvZ3JhbSBpcyBwcmVzZW50IGFuZCB3b3Jrcy4KKytjYXNlICQyIGluIC0tdmVyc2lvbnwtLWhlbHApIGV4aXQgJHN0OzsgZXNhYworKworKyMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMgd2hlbiB0aGUgdXNlcgorKyMgdHJpZXMgdG8gdXNlIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBhIHRvb2wgb24gYSBmaWxlIHRoYXQgcmVxdWlyZXMgYQorKyMgbWluaW11bSB2ZXJzaW9uLgorK2lmIHRlc3QgJHN0IC1lcSA2MzsgdGhlbgorKyAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorK2VsaWYgdGVzdCAkc3QgLWVxIDEyNzsgdGhlbgorKyAgIyBQcm9ncmFtIHdhcyBtaXNzaW5nLgorKyAgbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorK2Vsc2UKKysgICMgUHJvZ3JhbSB3YXMgZm91bmQgYW5kIGV4ZWN1dGVkLCBidXQgZmFpbGVkLiAgR2l2ZSB1cC4KKysgIGV4aXQgJHN0CisrZmkKKyAKKy1leGl0IDAKKytwZXJsX1VSTD1odHRwOi8vd3d3LnBlcmwub3JnLworK2ZsZXhfVVJMPWh0dHA6Ly9mbGV4LnNvdXJjZWZvcmdlLm5ldC8KKytnbnVfc29mdHdhcmVfVVJMPWh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZQorKworK3Byb2dyYW1fZGV0YWlscyAoKQorK3sKKysgIGNhc2UgJDEgaW4KKysgICAgYWNsb2NhbHxhdXRvbWFrZSkKKysgICAgICBlY2hvICJUaGUgJyQxJyBwcm9ncmFtIGlzIHBhcnQgb2YgdGhlIEdOVSBBdXRvbWFrZSBwYWNrYWdlOiIKKysgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b21ha2U+IgorKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIEF1dG9jb25mLCBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKysgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmY+IgorKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tNC8+IgorKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorKyAgICAgIDs7CisrICAgIGF1dG9jb25mfGF1dG9tNHRlfGF1dG9oZWFkZXIpCisrICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b2NvbmYgcGFja2FnZToiCisrICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9jb25mLz4iCisrICAgICAgZWNobyAiSXQgYWxzbyByZXF1aXJlcyBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKysgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKysgICAgICBlY2hvICI8JHBlcmxfVVJMPiIKKysgICAgICA7OworKyAgZXNhYworK30KKysKKytnaXZlX2FkdmljZSAoKQorK3sKKysgICMgTm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCisrICBub3JtYWxpemVkX3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCisrICAgIHMvXmdudS0vLzsgdAorKyAgICBzL15nbnUvLzsgdAorKyAgICBzL15nLy87IHQnYAorKworKyAgcHJpbnRmICclc1xuJyAiJyQxJyBpcyAkbXNnLiIKKysKKysgIGNvbmZpZ3VyZV9kZXBzPSInY29uZmlndXJlLmFjJyBvciBtNCBmaWxlcyBpbmNsdWRlZCBieSAnY29uZmlndXJlLmFjJyIKKysgIGNhc2UgJG5vcm1hbGl6ZWRfcHJvZ3JhbSBpbgorKyAgICBhdXRvY29uZiopCisrICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdjb25maWd1cmUuYWMnLCIKKysgICAgICBlY2hvICJvciBtNCBmaWxlcyBpbmNsdWRlZCBieSBpdC4iCisrICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvY29uZicKKysgICAgICA7OworKyAgICBhdXRvaGVhZGVyKikKKysgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjY29uZmlnLmgnIG9yIgorKyAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCisrICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvaGVhZGVyJworKyAgICAgIDs7CisrICAgIGF1dG9tYWtlKikKKysgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ01ha2VmaWxlLmFtJyBvciIKKysgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b21ha2UnCisrICAgICAgOzsKKysgICAgYWNsb2NhbCopCisrICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdhY2luY2x1ZGUubTQnIG9yIgorKyAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCisrICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhY2xvY2FsJworKyAgICAgIDs7CisrICAgYXV0b200dGUqKQorKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgbWFpbnRhaW5lciBmaWxlcyB0aGF0IHJlcXVpcmUiCisrICAgICAgZWNobyAidGhlICdhdXRvbTR0ZScgcHJvZ3JhbSB0byBiZSByZWJ1aWx0LiIKKysgICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9tNHRlJworKyAgICAgIDs7CisrICAgIGJpc29uKnx5YWNjKikKKysgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLnknIGZpbGUuIgorKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgQmlzb24gcGFja2FnZToiCisrICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2Jpc29uLz4iCisrICAgICAgOzsKKysgICAgbGV4KnxmbGV4KikKKysgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLmwnIGZpbGUuIgorKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBGYXN0IExleGljYWwgQW5hbHl6ZXIgcGFja2FnZToiCisrICAgICAgZWNobyAiPCRmbGV4X1VSTD4iCisrICAgICAgOzsKKysgICAgaGVscDJtYW4qKQorKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kiIFwKKysgICAgICAgICAgICJvZiBhIG1hbiBwYWdlLiIKKysgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgR05VIEhlbHAybWFuIHBhY2thZ2U6IgorKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9oZWxwMm1hbi8+IgorKyAgICA7OworKyAgICBtYWtlaW5mbyopCisrICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy50ZXhpJyBmaWxlLCBvciIKKysgICAgICBlY2hvICJhbnkgb3RoZXIgZmlsZSBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuIgorKyAgICAgIGVjaG8gIllvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFRleGluZm8gcGFja2FnZToiCisrICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML3RleGluZm8vPiIKKysgICAgICBlY2hvICJUaGUgc3B1cmlvdXMgbWFrZWluZm8gY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiIKKysgICAgICBlY2hvICJ1c2luZyBhIGJ1Z2d5ICdtYWtlJyAoQUlYLCBEVSwgSVJJWCksIGluIHdoaWNoIGNhc2UgeW91IG1pZ2h0IgorKyAgICAgIGVjaG8gIndhbnQgdG8gaW5zdGFsbCBHTlUgbWFrZToiCisrICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML21ha2UvPiIKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlIHByb3BlciIKKysgICAgICBlY2hvICJ0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlICdSRUFETUUnIGZpbGUsIGl0IgorKyAgICAgIGVjaG8gIm9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmciCisrICAgICAgZWNobyAidGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIgorKyAgICAgIGVjaG8gImNhc2Ugc29tZSBvdGhlciBwYWNrYWdlIGNvbnRhaW5zIHRoaXMgbWlzc2luZyAnJDEnIHByb2dyYW0uIgorKyAgICAgIDs7CisrICBlc2FjCisrfQorKworK2dpdmVfYWR2aWNlICIkMSIgfCBzZWQgLWUgJzFzL14vV0FSTklORzogLycgXAorKyAgICAgICAgICAgICAgICAgICAgICAgLWUgJzIsJHMvXi8gICAgICAgICAvJyA+JjIKKysKKysjIFByb3BhZ2F0ZSB0aGUgY29ycmVjdCBleGl0IHN0YXR1cyAoZXhwZWN0ZWQgdG8gYmUgMTI3IGZvciBhIHByb2dyYW0KKysjIG5vdCBmb3VuZCwgNjMgZm9yIGEgcHJvZ3JhbSB0aGF0IGZhaWxlZCBkdWUgdG8gdmVyc2lvbiBtaXNtYXRjaCkuCisrZXhpdCAkc3QKKyAKKyAjIExvY2FsIHZhcmlhYmxlczoKKyAjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyAjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyAjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgorKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisrIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisgIyBFbmQ6CitkaWZmIC0tZ2l0IGEvY29uZmlnL21raW5zdGFsbGRpcnMgYi9jb25maWcvbWtpbnN0YWxsZGlycworaW5kZXggZWY3ZTE2Zi4uNTVkNTM3ZiAxMDA3NTUKKy0tLSBhL2NvbmZpZy9ta2luc3RhbGxkaXJzCisrKysgYi9jb25maWcvbWtpbnN0YWxsZGlycworQEAgLTEsNyArMSw3IEBACisgIyEgL2Jpbi9zaAorICMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisgCistc2NyaXB0dmVyc2lvbj0yMDA2LTA1LTExLjE5Cisrc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworIAorICMgT3JpZ2luYWwgYXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisgIyBDcmVhdGVkOiAxOTkzLTA1LTE2CitAQCAtODEsOSArODEsOSBAQCBjYXNlICRkaXJtb2RlIGluCisgICAgICAgZWNobyAibWtkaXIgLXAgLS0gJCoiCisgICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisgICAgIGVsc2UKKy0gICAgICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAorKyAgICAgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgJ21rZGlyJyBjb21tYW5kIGRvZXMgbm90CisgICAgICAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCistICAgICAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKKysgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSAnLicgYWxyZWFkeQorICAgICAgICMgZXhpc3RzLgorICAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorQEAgLTE1Nyw1ICsxNTcsNiBAQCBleGl0ICRlcnJzdGF0dXMKKyAjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyAjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyAjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgorKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisrIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisgIyBFbmQ6CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3ODUyZTU5Li5kODE3ZjNiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xLDYyICsxLDgzIEBACisgIyEgL2Jpbi9zaAorICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKy0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSBmb3IgQ29yZUZvdW5kYXRpb24gNDc2LjE3LjIuCisrIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIENvcmVGb3VuZGF0aW9uIDQ3Ni4xNy4yLgorICMKKyAjIFJlcG9ydCBidWdzIHRvIDxiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgorICMKKy0jIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKy0jIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIworICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAKKyAjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKyBEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCistaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGVtdWxhdGUgc2gKKyAgIE5VTExDTUQ9OgorLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorIGVsc2UKKy0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKysgICpwb3NpeCopIDoKKysgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisrICAqKSA6CisrICAgICA7OworIGVzYWMKKy0KKyBmaQorIAorIAorLQorLQorLSMgUEFUSCBuZWVkcyBDUgorLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKy1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKy1hc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKy1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKy1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCistYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCistCistIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCistaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKy0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKy0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKy0gIGNobW9kICt4IGNvbmYkJC5zaAorLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrYXNfbmw9JworKycKKytleHBvcnQgYXNfbmwKKysjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisrYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisrYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKysjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKysjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgorK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKysgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisrICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKKytlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19lY2hvPSdwcmludGYgJXNcbicKKysgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworK2Vsc2UKKysgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgICBlbHNlCistICAgIFBBVEhfU0VQQVJBVE9SPToKKysgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKysgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKysgICAgICBhcmc9JDE7CisrICAgICAgY2FzZSAkYXJnIGluICMoCisrICAgICAgKiIkYXNfbmwiKikKKysJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisrCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisrICAgICAgZXNhYzsKKysgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisrICAgICcKKysgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisrICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgICBmaQorLSAgcm0gLWYgY29uZiQkLnNoCisrICBleHBvcnQgYXNfZWNob19ib2R5CisrICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCisgZmkKKyAKKy0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKy1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIGFzX3Vuc2V0PXVuc2V0CistZWxzZQorLSAgYXNfdW5zZXQ9ZmFsc2UKKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgUEFUSF9TRVBBUkFUT1I9OgorKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgfQorIGZpCisgCisgCitAQCAtNjUsMjAgKzg2LDE5IEBAIGZpCisgIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisgIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisgIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorLWFzX25sPScKKy0nCisgSUZTPSIgIiIJJGFzX25sIgorIAorICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCistY2FzZSAkMCBpbgorK2FzX215c2VsZj0KKytjYXNlICQwIGluICMoKAorICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCistZG9uZQorKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyAgICAgIDs7CitAQCAtODksMzIgKzEwOSwzMjQgQEAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICAgYXNfbXlzZWxmPSQwCisgZmkKKyBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCistICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCistICB7IChleGl0IDEpOyBleGl0IDE7IH0KKysgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisrICBleGl0IDEKKyBmaQorIAorLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorLWZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKKy1kbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKysjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisrIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCisrZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisrICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKKyBkb25lCisgUFMxPSckICcKKyBQUzI9Jz4gJworIFBTND0nKyAnCisgCisgIyBOTFMgbnVpc2FuY2VzLgorLWZvciBhc192YXIgaW4gXAorLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKy0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCistICBMQ19URUxFUEhPTkUgTENfVElNRQorK0xDX0FMTD1DCisrZXhwb3J0IExDX0FMTAorK0xBTkdVQUdFPUMKKytleHBvcnQgTEFOR1VBR0UKKysKKysjIENEUEFUSC4KKysodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisrCisrIyBVc2UgYSBwcm9wZXIgaW50ZXJuYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gZW5zdXJlIHdlIGRvbid0IGZhbGwKKysgICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KKysgIGlmIHRlc3QgeCIke19hc19jYW5fcmVleGVjfSIgIT0geG5vICYmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCisrICAgIF9hc19jYW5fcmVleGVjPW5vOyBleHBvcnQgX2FzX2Nhbl9yZWV4ZWM7CisrICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisrIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKysjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KKytCQVNIX0VOVj0vZGV2L251bGwKKytFTlY9L2Rldi9udWxsCisrKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCisrY2FzZSAkLSBpbiAjICgoKCgKKysgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworKyAgKnYqICkgYXNfb3B0cz0tdiA7OworKyAgKngqICkgYXNfb3B0cz0teCA7OworKyAgKiApIGFzX29wdHM9IDs7CisrZXNhYworK2V4ZWMgJENPTkZJR19TSEVMTCAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisrIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCisrIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorKyRhc19lY2hvICIkMDogY291bGQgbm90IHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMIiA+JjIKKythc19mbl9leGl0IDI1NQorKyAgZmkKKysgICMgV2UgZG9uJ3Qgd2FudCB0aGlzIHRvIHByb3BhZ2F0ZSB0byBvdGhlciBzdWJwcm9jZXNzZXMuCisrICAgICAgICAgIHsgX2FzX2Nhbl9yZWV4ZWM9OyB1bnNldCBfYXNfY2FuX3JlZXhlYzt9CisraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisrICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2Vsc2UKKysgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisrICAqcG9zaXgqKSA6CisrICAgIHNldCAtbyBwb3NpeCA7OyAjKAorKyAgKikgOgorKyAgICAgOzsKKytlc2FjCisrZmkKKysiCisrICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KKythc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisrCisrZXhpdGNvZGU9MAorK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9CisrYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KKytpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisrCisrZWxzZQorKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKyt0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCisrdGVzdCAteCAvIHx8IGV4aXQgMSIKKysgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisrICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisrICBldmFsICd0ZXN0IFwieFwkYXNfbGluZW5vXzEnXCRhc19ydW4nXCIgIT0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIiAmJgorKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQorK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxCisrCisrICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAorKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKysgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKysgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKysgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorKyAgICB0ZXN0IFwiWFxgcHJpbnRmICVzIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiBcXAorKyAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEiCisrICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKytlbHNlCisrICBhc19oYXZlX3JlcXVpcmVkPW5vCisrZmkKKysgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKysKKytlbHNlCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrYXNfZm91bmQ9ZmFsc2UKKytmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICisgZG8KKy0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCistICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGFzX2ZvdW5kPToKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKwkgLyopCisrCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKysJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisrCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorKwkgICAgIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKysgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKysJCSAgIGlmIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3N1Z2dlc3RlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisrICBicmVhayAyCisrZmkKKytmaQorKwkgICBkb25lOzsKKysgICAgICAgZXNhYworKyAgYXNfZm91bmQ9ZmFsc2UKKytkb25lCisrJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisrCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKysgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKytmaTsgfQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKysgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisrICBleHBvcnQgQ09ORklHX1NIRUxMCisrICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisrIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKysjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KKytCQVNIX0VOVj0vZGV2L251bGwKKytFTlY9L2Rldi9udWxsCisrKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCisrY2FzZSAkLSBpbiAjICgoKCgKKysgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworKyAgKnYqICkgYXNfb3B0cz0tdiA7OworKyAgKngqICkgYXNfb3B0cz0teCA7OworKyAgKiApIGFzX29wdHM9IDs7CisrZXNhYworK2V4ZWMgJENPTkZJR19TSEVMTCAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisrIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCisrIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorKyRhc19lY2hvICIkMDogY291bGQgbm90IHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMIiA+JjIKKytleGl0IDI1NQorK2ZpCisrCisrICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKysgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKysgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKysgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisrICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgIGVsc2UKKy0gICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKKyskMDogYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0IGFib3V0IHlvdXIgc3lzdGVtLAorKyQwOiBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworKyQwOiBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1bgorKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICAgZmkKKy1kb25lCisrICBleGl0IDEKKytmaQorK2ZpCisrZmkKKytTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorK2V4cG9ydCBTSEVMTAorKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9CisrdW5zZXQgQ0xJQ09MT1JfRk9SQ0UgR1JFUF9PUFRJT05TCisrCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgTTRzaCBTaGVsbCBGdW5jdGlvbnMuICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyBhc19mbl91bnNldCBWQVIKKysjIC0tLS0tLS0tLS0tLS0tLQorKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorK2FzX2ZuX3Vuc2V0ICgpCisreworKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorK30KKythc191bnNldD1hc19mbl91bnNldAorKworKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCisrYXNfZm5fc2V0X3N0YXR1cyAoKQorK3sKKysgIHJldHVybiAkMQorK30gIyBhc19mbl9zZXRfc3RhdHVzCisrCisrIyBhc19mbl9leGl0IFNUQVRVUworKyMgLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KKythc19mbl9leGl0ICgpCisreworKyAgc2V0ICtlCisrICBhc19mbl9zZXRfc3RhdHVzICQxCisrICBleGl0ICQxCisrfSAjIGFzX2ZuX2V4aXQKKysKKysjIGFzX2ZuX21rZGlyX3AKKysjIC0tLS0tLS0tLS0tLS0KKysjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KKythc19mbl9ta2Rpcl9wICgpCisreworKworKyAgY2FzZSAkYXNfZGlyIGluICMoCisrICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisrICBlc2FjCisrICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKysgICAgYXNfZGlycz0KKysgICAgd2hpbGUgOjsgZG8KKysgICAgICBjYXNlICRhc19kaXIgaW4gIygKKysgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKysgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworKyAgICAgIGVzYWMKKysgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CisrJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyskYXNfZWNobyBYIiRhc19kaXIiIHwKKysgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKVteL10uKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXCkkL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKysgICAgZG9uZQorKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisrICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorKworKworK30gIyBhc19mbl9ta2Rpcl9wCisrCisrIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KKythc19mbl9leGVjdXRhYmxlX3AgKCkKKyt7CisrICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCisrfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKysjIGltcGxlbWVudGF0aW9ucy4KKytpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisrICBldmFsICdhc19mbl9hcHBlbmQgKCkKKysgIHsKKysgICAgZXZhbCAkMSs9XCQyCisrICB9JworK2Vsc2UKKysgIGFzX2ZuX2FwcGVuZCAoKQorKyAgeworKyAgICBldmFsICQxPVwkJDFcJDIKKysgIH0KKytmaSAjIGFzX2ZuX2FwcGVuZAorKworKyMgYXNfZm5fYXJpdGggQVJHLi4uCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0KKysjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKysjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKysjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgorK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKysgIHsKKysgICAgYXNfdmFsPSQoKCAkKiApKQorKyAgfScKKytlbHNlCisrICBhc19mbl9hcml0aCAoKQorKyAgeworKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorKyAgfQorK2ZpICMgYXNfZm5fYXJpdGgKKysKKysKKysjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCisrYXNfZm5fZXJyb3IgKCkKKyt7CisrICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisrICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisrICBmaQorKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKysgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworK30gIyBhc19mbl9lcnJvcgorIAorLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorIGlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgIGFzX2V4cHI9ZXhwcgorQEAgLTEyOCwxMyArNDQwLDE3IEBAIGVsc2UKKyAgIGFzX2Jhc2VuYW1lPWZhbHNlCisgZmkKKyAKKytpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX2Rpcm5hbWU9ZGlybmFtZQorK2Vsc2UKKysgIGFzX2Rpcm5hbWU9ZmFsc2UKKytmaQorIAorLSMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKyBhc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKyAJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWC8iJDAiIHwKKyskYXNfZWNobyBYLyIkMCIgfAorICAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKyAJICAgIHMvL1wxLworIAkgICAgcQorQEAgLTE0OSw1NzYgKzQ2NSwxMjcgQEAgZWNobyBYLyIkMCIgfAorIAkgIH0KKyAJICBzLy4qLy4vOyBxJ2AKKyAKKy0jIENEUEFUSC4KKy0kYXNfdW5zZXQgQ0RQQVRICisrIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKythc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKyAKKyAKKy1pZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCistICBpZiAoZXZhbCAiOiIpIDI+L2Rldi9udWxsOyB0aGVuCistICBhc19oYXZlX3JlcXVpcmVkPXllcworLWVsc2UKKy0gIGFzX2hhdmVfcmVxdWlyZWQ9bm8KKy1maQorKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworKyAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzInJGFzX3J1biciICYmCisrICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisrICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKysgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKysgICAgICBOCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKysgICAgICB0IGxvb3AKKysgICAgICBzLy1cbi4qLy8KKysgICAgJyA+JGFzX21lLmxpbmVubyAmJgorKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorIAorLSAgaWYgdGVzdCAkYXNfaGF2ZV9yZXF1aXJlZCA9IHllcyAmJiAJIChldmFsICI6CistKGFzX2Z1bmNfcmV0dXJuICgpIHsKKy0gIChleGl0IFwkMSkKKy19CistYXNfZnVuY19zdWNjZXNzICgpIHsKKy0gIGFzX2Z1bmNfcmV0dXJuIDAKKy19CistYXNfZnVuY19mYWlsdXJlICgpIHsKKy0gIGFzX2Z1bmNfcmV0dXJuIDEKKy19CistYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CistICByZXR1cm4gMAorLX0KKy1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKy0gIHJldHVybiAxCisrICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCisrICAjIGFscmVhZHkgZG9uZSB0aGF0LCBzbyBlbnN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGRvIHNvIGFnYWluIGFuZCBmYWxsCisrICAjIGluIGFuIGluZmluaXRlIGxvb3AuICBUaGlzIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIHByYWN0aWNlLgorKyAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYworKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKysgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKysgIC4gIi4vJGFzX21lLmxpbmVubyIKKysgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorKyAgZXhpdAorIH0KKyAKKy1leGl0Y29kZT0wCistaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCistICA6CistZWxzZQorLSAgZXhpdGNvZGU9MQorLSAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorLWZpCistCistaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCistICBleGl0Y29kZT0xCistICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCistZmkKKytFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCisrLW4qKQorKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisrICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKysgIHh5KSAgRUNIT19DPSdcYyc7OworKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorKyAgICAgICBFQ0hPX1Q9JwknOzsKKysgIGVzYWM7OworKyopCisrICBFQ0hPX049Jy1uJzs7CisrZXNhYworIAorLWlmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKy0gIDoKKytybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorIGVsc2UKKy0gIGV4aXRjb2RlPTEKKy0gIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCistZmkKKy0KKy1pZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCistICBleGl0Y29kZT0xCistICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgorKyAgcm0gLWYgY29uZiQkLmRpcgorKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorK2ZpCisraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisrICAgIGFzX2xuX3M9J2xuIC1zJworKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKysgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisrICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKysgICAgICBhc19sbl9zPSdjcCAtcFInCisrICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgICBhc19sbl9zPWxuCisrICBlbHNlCisrICAgIGFzX2xuX3M9J2NwIC1wUicKKysgIGZpCisrZWxzZQorKyAgYXNfbG5fcz0nY3AgLXBSJworIGZpCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKyAKKy1pZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCistICA6CisraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworIGVsc2UKKy0gIGV4aXRjb2RlPTEKKy0gIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorLXRlc3QgXCRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2FzX3Rlc3RfeD0ndGVzdCAteCcKKythc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCisgCistKAorLSAgYXNfbGluZW5vXzE9XCRMSU5FTk8KKy0gIGFzX2xpbmVub18yPVwkTElORU5PCistICB0ZXN0IFwieFwkYXNfbGluZW5vXzFcIiAhPSBcInhcJGFzX2xpbmVub18yXCIgJiYKKy0gIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzJcIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CistIikgMj4gL2Rldi9udWxsOyB0aGVuCistICA6CistZWxzZQorLSAgYXNfY2FuZGlkYXRlX3NoZWxscz0KKy0gICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGNhc2UgJGFzX2RpciBpbgorLQkgLyopCistCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKy0JICAgICBhc19jYW5kaWRhdGVfc2hlbGxzPSIkYXNfY2FuZGlkYXRlX3NoZWxscyAkYXNfZGlyLyRhc19iYXNlIgorLQkgICBkb25lOzsKKy0gICAgICAgZXNhYworLWRvbmUKKy1JRlM9JGFzX3NhdmVfSUZTCisrIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisrIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKy0gICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworLQkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorLQkgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCistCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgZW11bGF0ZSBzaAorLSAgTlVMTENNRD06CistICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCistICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCistICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorLWVsc2UKKy0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CistZXNhYworK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisgCistZmkKKyAKKyt0ZXN0IC1uICIkREpESVIiIHx8IGV4ZWMgNzwmMCA8L2Rldi9udWxsCisrZXhlYyA2PiYxCisgCistOgorLV9BU0VPRgorLX07IHRoZW4KKy0gIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKKy0JICAgICAgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCistCSAgICAgICBpZiB7ICIkYXNfc2hlbGwiIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKKy1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIGVtdWxhdGUgc2gKKy0gIE5VTExDTUQ9OgorLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKy0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKy1lbHNlCistICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKy0gICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworLWVzYWMKKysjIE5hbWUgb2YgdGhlIGhvc3QuCisrIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIAorLWZpCistCistCistOgorLShhc19mdW5jX3JldHVybiAoKSB7CistICAoZXhpdCAkMSkKKy19CistYXNfZnVuY19zdWNjZXNzICgpIHsKKy0gIGFzX2Z1bmNfcmV0dXJuIDAKKy19CistYXNfZnVuY19mYWlsdXJlICgpIHsKKy0gIGFzX2Z1bmNfcmV0dXJuIDEKKy19CistYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CistICByZXR1cm4gMAorLX0KKy1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKy0gIHJldHVybiAxCistfQorLQorLWV4aXRjb2RlPTAKKy1pZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKy0gIDoKKy1lbHNlCistICBleGl0Y29kZT0xCistICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCistZmkKKy0KKy1pZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKy0gIGV4aXRjb2RlPTEKKy0gIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKy1maQorLQorLWlmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKy0gIDoKKy1lbHNlCistICBleGl0Y29kZT0xCistICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorLWZpCistCistaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorLSAgZXhpdGNvZGU9MQorLSAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKy1maQorLQorLWlmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KKy0gIDoKKy1lbHNlCistICBleGl0Y29kZT0xCistICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKy1maQorLQorLXRlc3QgJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CistCistKAorLSAgYXNfbGluZW5vXzE9JExJTkVOTworLSAgYXNfbGluZW5vXzI9JExJTkVOTworLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCistICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKy0KKy1fQVNFT0YKKy19OyB0aGVuCistICBicmVhaworLWZpCistCistZmkKKy0KKy0gICAgICBkb25lCistCistICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKy0gIGZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WCistICAgICAgICBkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorLSAgICAgICAgZG9uZQorLSAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorLSAgICAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiRhc19teXNlbGYiICR7MSsiJEAifQorLWZpCistCistCistICAgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSBubzsgdGhlbgorLSAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQorLSAgICAgIGVjaG8gc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4gIFBsZWFzZSBpbnN0YWxsIGEKKy0gICAgICBlY2hvIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhCistICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCistICAgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CistZmkKKy0KKy0KKy1maQorLQorLWZpCistCistCistCistKGV2YWwgImFzX2Z1bmNfcmV0dXJuICgpIHsKKy0gIChleGl0IFwkMSkKKy19CistYXNfZnVuY19zdWNjZXNzICgpIHsKKy0gIGFzX2Z1bmNfcmV0dXJuIDAKKy19CistYXNfZnVuY19mYWlsdXJlICgpIHsKKy0gIGFzX2Z1bmNfcmV0dXJuIDEKKy19CistYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CistICByZXR1cm4gMAorLX0KKy1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKy0gIHJldHVybiAxCistfQorLQorLWV4aXRjb2RlPTAKKy1pZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKy0gIDoKKy1lbHNlCistICBleGl0Y29kZT0xCistICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCistZmkKKy0KKy1pZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKy0gIGV4aXRjb2RlPTEKKy0gIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKy1maQorLQorLWlmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKy0gIDoKKy1lbHNlCistICBleGl0Y29kZT0xCistICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorLWZpCistCistaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorLSAgZXhpdGNvZGU9MQorLSAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKy1maQorLQorLWlmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4KKy0gIDoKKy1lbHNlCistICBleGl0Y29kZT0xCistICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KKy1maQorLQorLXRlc3QgXCRleGl0Y29kZSA9IDAiKSB8fCB7CistICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgorLSAgZWNobyBQbGVhc2UgdGVsbCBhdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAorLSAgZWNobyBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworLSAgZWNobyBtZXNzYWdlCistfQorLQorLQorLQorLSAgYXNfbGluZW5vXzE9JExJTkVOTworLSAgYXNfbGluZW5vXzI9JExJTkVOTworLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCistICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKKy0KKy0gICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKy0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKy0gICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJworLSAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKy0gICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKy0gICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKKy0gICMgY2FzZSBhdCBsaW5lIGVuZC4KKy0gICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorLSAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCistICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorLSAgc2VkIC1uICcKKy0gICAgcAorLSAgICAvWyRdTElORU5PLz0KKy0gICcgPCRhc19teXNlbGYgfAorLSAgICBzZWQgJworLSAgICAgIHMvWyRdTElORU5PLiovJi0vCistICAgICAgdCBsaW5lbm8KKy0gICAgICBiCistICAgICAgOmxpbmVubworLSAgICAgIE4KKy0gICAgICA6bG9vcAorLSAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworLSAgICAgIHQgbG9vcAorLSAgICAgIHMvLVxuLiovLworLSAgICAnID4kYXNfbWUubGluZW5vICYmCistICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKy0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCistICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworLSAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCistICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorLSAgLiAiLi8kYXNfbWUubGluZW5vIgorLSAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCistICBleGl0CistfQorLQorLQorLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgYXNfZGlybmFtZT1kaXJuYW1lCistZWxzZQorLSAgYXNfZGlybmFtZT1mYWxzZQorLWZpCistCistRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKy1jYXNlIGBlY2hvIC1uIHhgIGluCistLW4qKQorLSAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKy0gICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorLSAgKikgICBFQ0hPX0M9J1xjJzs7CistICBlc2FjOzsKKy0qKQorLSAgRUNIT19OPSctbic7OworLWVzYWMKKy0KKy1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorLSAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCistICBhc19leHByPWV4cHIKKy1lbHNlCistICBhc19leHByPWZhbHNlCistZmkKKy0KKy1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorLWlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorLSAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorLWVsc2UKKy0gIHJtIC1mIGNvbmYkJC5kaXIKKy0gIG1rZGlyIGNvbmYkJC5kaXIKKy1maQorLWVjaG8gPmNvbmYkJC5maWxlCistaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCistICBhc19sbl9zPSdsbiAtcycKKy0gICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CistICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorLSAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCistICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorLSAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorLSAgICBhc19sbl9zPSdjcCAtcCcKKy1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorLSAgYXNfbG5fcz1sbgorLWVsc2UKKy0gIGFzX2xuX3M9J2NwIC1wJworLWZpCistcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorLXJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKy0KKy1pZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCistICBhc19ta2Rpcl9wPToKKy1lbHNlCistICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorLSAgYXNfbWtkaXJfcD1mYWxzZQorLWZpCistCistaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgYXNfdGVzdF94PSd0ZXN0IC14JworLWVsc2UKKy0gIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICBhc19sc19MX29wdGlvbj1MCistICBlbHNlCistICAgIGFzX2xzX0xfb3B0aW9uPQorLSAgZmkKKy0gIGFzX3Rlc3RfeD0nCistICAgIGV2YWwgc2ggLWMgJ1wnJworLSAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorLSAgICAgICAgdGVzdCAtZCAiJDEvLiI7CistICAgICAgZWxzZQorLQljYXNlICQxIGluCistICAgICAgICAtKilzZXQgIi4vJDEiOzsKKy0JZXNhYzsKKy0JY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKy0JPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorLSAgICAnXCcnIHNoCistICAnCistZmkKKy1hc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorLQorLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKy1hc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorLQorLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorLWFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCistCistCistCistCistIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CistCistY2FzZSBYJGx0X0VDSE8gaW4KKy1YKi0tZmFsbGJhY2stZWNobykKKy0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCistICBFQ0hPPWBlY2hvICIkbHRfRUNITyIgfCBzZWQgJ3MsXFxcXFwkXFwkMCwnJDAnLCdgCistICA7OworLWVzYWMKKy0KKy1FQ0hPPSR7bHRfRUNITy1lY2hvfQorLWlmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKy0gICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorLSAgc2hpZnQKKy1lbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCistICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCistICA6CistZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCistICAjIFlpcHBlZSwgJEVDSE8gd29ya3MhCistICA6CistZWxzZQorLSAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorLSAgZXhlYyAkU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KKy1maQorLQorLWlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCistICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworLSAgc2hpZnQKKy0gIGNhdCA8PF9MVF9FT0YKKy0kKgorLV9MVF9FT0YKKy0gIGV4aXQgMAorLWZpCistCistIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKy0jIGlmIENEUEFUSCBpcyBzZXQuCistKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorLQorLWlmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorLSAgaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCistICAgICMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorLSAgICBmb3IgY21kIGluICdzZWQgNTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMnEgIiQwIicgJ2VjaG8gdGVzdCc7IGRvCistICAgICAgIyBleHBlY3RlZCBzaXplczogbGVzcyB0aGFuIDJLYiwgMUtiLCA1MTIgYnl0ZXMsIDE2IGJ5dGVzLCAuLi4KKy0gICAgICBpZiB7IGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGA7IH0gMj4vZGV2L251bGwgJiYKKy0JIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCistICAgICAgdGhlbgorLSAgICAgICAgYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICBmaQorLQorLSAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCistICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCistICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKy0gICAgOgorLSAgZWxzZQorLSAgICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKy0gICAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworLSAgICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJworLSAgICAjCistICAgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKy0KKy0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistICAgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCistICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICAgICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKKy0gICAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCistICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRkaXIvZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKy0gICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKy0gICAgICAgIEVDSE89IiRkaXIvZWNobyIKKy0gICAgICAgIGJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKy0KKy0gICAgaWYgdGVzdCAiWCRFQ0hPIiA9IFhlY2hvOyB0aGVuCistICAgICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCistICAgICAgaWYgdGVzdCAiWGB7IHByaW50IC1yICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCistICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyBwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorLSAgICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorLSAgICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKy0gICAgICAgIEVDSE89J3ByaW50IC1yJworLSAgICAgIGVsaWYgeyB0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0OyB9ICYmCistCSAgIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKy0gICAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorLSAgICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CistICAgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCistICAgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKy0gICAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKy0gICAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQorLSAgICAgIGVsc2UKKy0gICAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKy0gICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworLSAgICAgICAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCistCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKy0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCistCSAgIyBDb29sLCBwcmludGYgd29ya3MKKy0JICA6CistICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorLQkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorLQkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorLQkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorLQkgIENPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCistCSAgZXhwb3J0IENPTkZJR19TSEVMTAorLQkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorLQkgIGV4cG9ydCBTSEVMTAorLQkgIEVDSE89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorLSAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKy0JICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKy0JICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKy0JICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKy0JICBFQ0hPPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKy0gICAgICAgIGVsc2UKKy0JICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorLQkgIHByZXY9OgorLQorLQkgIGZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDUwcSAiJDAiJzsgZG8KKy0JICAgIGlmIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiOyB9IDI+L2Rldi9udWxsCistCSAgICB0aGVuCistCSAgICAgIGJyZWFrCistCSAgICBmaQorLQkgICAgcHJldj0iJGNtZCIKKy0JICBkb25lCistCistCSAgaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICIkMCInOyB0aGVuCistCSAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorLQkgICAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKKy0JICAgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICIkMCIgJHsxKyIkQCJ9CistCSAgZWxzZQorLQkgICAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KKy0JICAgIEVDSE89ZWNobworLQkgIGZpCistICAgICAgICBmaQorLSAgICAgIGZpCistICAgIGZpCistICBmaQorLWZpCistCistIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQorLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgorLWx0X0VDSE89JEVDSE8KKy1pZiB0ZXN0ICJYJGx0X0VDSE8iID0gIlgkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKy0gICBsdF9FQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcJDAgLS1mYWxsYmFjay1lY2hvIgorLWZpCistCistCistCistCistZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQorLQorLSMgTmFtZSBvZiB0aGUgaG9zdC4KKy0jIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorLSMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorLWFjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorLQorLSMKKy0jIEluaXRpYWxpemF0aW9ucy4KKy0jCistYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorLWFjX2NsZWFuX2ZpbGVzPQorLWFjX2NvbmZpZ19saWJvYmpfZGlyPS4KKy1MSUJPQkpTPQorLWNyb3NzX2NvbXBpbGluZz1ubworLXN1YmRpcnM9CistTUZMQUdTPQorLU1BS0VGTEFHUz0KKy1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorKyMKKysjIEluaXRpYWxpemF0aW9ucy4KKysjCisrYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorK2FjX2NsZWFuX2ZpbGVzPQorK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KKytMSUJPQkpTPQorK2Nyb3NzX2NvbXBpbGluZz1ubworK3N1YmRpcnM9CisrTUZMQUdTPQorK01BS0VGTEFHUz0KKyAKKyAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KKyBQQUNLQUdFX05BTUU9J0NvcmVGb3VuZGF0aW9uJworQEAgLTcyNiw2ICs1OTMsNyBAQCBQQUNLQUdFX1RBUk5BTUU9J29wZW5jZmxpdGUnCisgUEFDS0FHRV9WRVJTSU9OPSc0NzYuMTcuMicKKyBQQUNLQUdFX1NUUklORz0nQ29yZUZvdW5kYXRpb24gNDc2LjE3LjInCisgUEFDS0FHRV9CVUdSRVBPUlQ9J2JmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCcKKytQQUNLQUdFX1VSTD0nJworIAorIGFjX3VuaXF1ZV9maWxlPSJDb3JlRm91bmRhdGlvbi5oIgorIGFjX2NvbmZpZ19saWJvYmpfZGlyPWNvbXBhdAorQEAgLTc2NSwxNDYgKzYzMywxODIgQEAgYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmIgorIAorLWFjX3N1YnN0X3ZhcnM9J1NIRUxMCistUEFUSF9TRVBBUkFUT1IKKy1QQUNLQUdFX05BTUUKKy1QQUNLQUdFX1RBUk5BTUUKKy1QQUNLQUdFX1ZFUlNJT04KKy1QQUNLQUdFX1NUUklORworLVBBQ0tBR0VfQlVHUkVQT1JUCistZXhlY19wcmVmaXgKKy1wcmVmaXgKKy1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lCistYmluZGlyCistc2JpbmRpcgorLWxpYmV4ZWNkaXIKKy1kYXRhcm9vdGRpcgorLWRhdGFkaXIKKy1zeXNjb25mZGlyCistc2hhcmVkc3RhdGVkaXIKKy1sb2NhbHN0YXRlZGlyCistaW5jbHVkZWRpcgorLW9sZGluY2x1ZGVkaXIKKy1kb2NkaXIKKy1pbmZvZGlyCistaHRtbGRpcgorLWR2aWRpcgorLXBkZmRpcgorLXBzZGlyCistbGliZGlyCistbG9jYWxlZGlyCistbWFuZGlyCistREVGUworLUVDSE9fQworLUVDSE9fTgorLUVDSE9fVAorLUxJQlMKKy1idWlsZF9hbGlhcworLWhvc3RfYWxpYXMKKy10YXJnZXRfYWxpYXMKKy1DRl9WRVJTSU9OX0lORk8KKy1JTlNUQUxMX1BST0dSQU0KKy1JTlNUQUxMX1NDUklQVAorLUlOU1RBTExfREFUQQorLWFtX19pc3JjCistQ1lHUEFUSF9XCistUEFDS0FHRQorLVZFUlNJT04KKy1BQ0xPQ0FMCistQVVUT0NPTkYKKy1BVVRPTUFLRQorLUFVVE9IRUFERVIKKy1NQUtFSU5GTworLWluc3RhbGxfc2gKKy1TVFJJUAorLUlOU1RBTExfU1RSSVBfUFJPR1JBTQorLW1rZGlyX3AKKy1BV0sKKy1TRVRfTUFLRQorLWFtX19sZWFkaW5nX2RvdAorLUFNVEFSCistYW1fX3RhcgorLWFtX191bnRhcgorLU1BSU5UQUlORVJfTU9ERV9UUlVFCistTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCistTUFJTlQKKy1idWlsZAorLWJ1aWxkX2NwdQorLWJ1aWxkX3ZlbmRvcgorLWJ1aWxkX29zCistaG9zdAorLWhvc3RfY3B1CistaG9zdF92ZW5kb3IKKy1ob3N0X29zCistQ0MKKy1DRkxBR1MKKy1MREZMQUdTCistQ1BQRkxBR1MKKy1hY19jdF9DQworLUVYRUVYVAorLU9CSkVYVAorLURFUERJUgorLWFtX19pbmNsdWRlCistYW1fX3F1b3RlCistQU1ERVBfVFJVRQorLUFNREVQX0ZBTFNFCistQU1ERVBCQUNLU0xBU0gKKy1DQ0RFUE1PREUKKy1hbV9fZmFzdGRlcENDX1RSVUUKKy1hbV9fZmFzdGRlcENDX0ZBTFNFCistQ1hYCistQ1hYRkxBR1MKKy1hY19jdF9DWFgKKy1DWFhERVBNT0RFCistYW1fX2Zhc3RkZXBDWFhfVFJVRQorLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFCistQ1BQCistTElCVE9PTAorLVNFRAorLUdSRVAKKy1FR1JFUAorLUZHUkVQCistTEQKKy1EVU1QQklOCistYWNfY3RfRFVNUEJJTgorLU5NCistTE5fUworLUFSCistUkFOTElCCistbHRfRUNITworLURTWU1VVElMCistTk1FRElUCistTElQTworLU9UT09MCistT1RPT0w2NAorLUNYWENQUAorLUNNUAorK2FjX2hlYWRlcl9saXN0PQorK2FjX3N1YnN0X3ZhcnM9J2FtX19FWEVFWFRfRkFMU0UKKythbV9fRVhFRVhUX1RSVUUKKytMVExJQk9CSlMKKytMSUJPQkpTCisrQUxMT0NBCisrUFRIUkVBRF9DRkxBR1MKKytQVEhSRUFEX0xJQlMKKytQVEhSRUFEX0NDCisrYWN4X3B0aHJlYWRfY29uZmlnCisrVVVJRF9MSUJTCisrVVVJRF9MREZMQUdTCisrVVVJRF9DUFBGTEFHUworK1VVSURfQ09ORklHCisrSUNVX0xJQlMKKytJQ1VfTERGTEFHUworK0lDVV9DUFBGTEFHUworK0lDVV9DT05GSUcKKytQS0dfQ09ORklHCisrQ0ZfQlVJTERfVEVTVFNfRkFMU0UKKytDRl9CVUlMRF9URVNUU19UUlVFCisrQ0ZfQlVJTERfUFJPRklMRV9GQUxTRQorK0NGX0JVSUxEX1BST0ZJTEVfVFJVRQorK0NGX0JVSUxEX0RFQlVHX0ZBTFNFCisrQ0ZfQlVJTERfREVCVUdfVFJVRQorIEFTCisrQ01QCisrQ1hYQ1BQCisrT1RPT0w2NAorK09UT09MCisrTElQTworK05NRURJVAorK0RTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorK1JBTkxJQgorK2FjX2N0X0FSCisrQVIKKyBETExUT09MCisgT0JKRFVNUAorLUNGX0JVSUxEX0RFQlVHX1RSVUUKKy1DRl9CVUlMRF9ERUJVR19GQUxTRQorLUNGX0JVSUxEX1BST0ZJTEVfVFJVRQorLUNGX0JVSUxEX1BST0ZJTEVfRkFMU0UKKy1DRl9CVUlMRF9URVNUU19UUlVFCistQ0ZfQlVJTERfVEVTVFNfRkFMU0UKKy1QS0dfQ09ORklHCistSUNVX0NPTkZJRworLUlDVV9DUFBGTEFHUworLUlDVV9MREZMQUdTCistSUNVX0xJQlMKKy1VVUlEX0NPTkZJRworLVVVSURfQ1BQRkxBR1MKKy1VVUlEX0xERkxBR1MKKy1VVUlEX0xJQlMKKy1hY3hfcHRocmVhZF9jb25maWcKKy1QVEhSRUFEX0NDCistUFRIUkVBRF9MSUJTCistUFRIUkVBRF9DRkxBR1MKKy1BTExPQ0EKKy1MSUJPQkpTCistTFRMSUJPQkpTJworK0xOX1MKKytOTQorK2FjX2N0X0RVTVBCSU4KKytEVU1QQklOCisrTEQKKytGR1JFUAorK1NFRAorK0xJQlRPT0wKKytFR1JFUAorK0dSRVAKKytDUFAKKythbV9fZmFzdGRlcENYWF9GQUxTRQorK2FtX19mYXN0ZGVwQ1hYX1RSVUUKKytDWFhERVBNT0RFCisrYWNfY3RfQ1hYCisrQ1hYRkxBR1MKKytDWFgKKythbV9fZmFzdGRlcENDX0ZBTFNFCisrYW1fX2Zhc3RkZXBDQ19UUlVFCisrQ0NERVBNT0RFCisrYW1fX25vZGVwCisrQU1ERVBCQUNLU0xBU0gKKytBTURFUF9GQUxTRQorK0FNREVQX1RSVUUKKythbV9fcXVvdGUKKythbV9faW5jbHVkZQorK0RFUERJUgorK09CSkVYVAorK0VYRUVYVAorK2FjX2N0X0NDCisrQ1BQRkxBR1MKKytMREZMQUdTCisrQ0ZMQUdTCisrQ0MKKytob3N0X29zCisraG9zdF92ZW5kb3IKKytob3N0X2NwdQorK2hvc3QKKytidWlsZF9vcworK2J1aWxkX3ZlbmRvcgorK2J1aWxkX2NwdQorK2J1aWxkCisrTUFJTlQKKytNQUlOVEFJTkVSX01PREVfRkFMU0UKKytNQUlOVEFJTkVSX01PREVfVFJVRQorK0FNX0JBQ0tTTEFTSAorK0FNX0RFRkFVTFRfVkVSQk9TSVRZCisrQU1fREVGQVVMVF9WCisrQU1fVgorK2FtX191bnRhcgorK2FtX190YXIKKytBTVRBUgorK2FtX19sZWFkaW5nX2RvdAorK1NFVF9NQUtFCisrQVdLCisrbWtkaXJfcAorK01LRElSX1AKKytJTlNUQUxMX1NUUklQX1BST0dSQU0KKytTVFJJUAorK2luc3RhbGxfc2gKKytNQUtFSU5GTworK0FVVE9IRUFERVIKKytBVVRPTUFLRQorK0FVVE9DT05GCisrQUNMT0NBTAorK1ZFUlNJT04KKytQQUNLQUdFCisrQ1lHUEFUSF9XCisrYW1fX2lzcmMKKytJTlNUQUxMX0RBVEEKKytJTlNUQUxMX1NDUklQVAorK0lOU1RBTExfUFJPR1JBTQorK0NGX1ZFUlNJT05fSU5GTworK3RhcmdldF9hbGlhcworK2hvc3RfYWxpYXMKKytidWlsZF9hbGlhcworK0xJQlMKKytFQ0hPX1QKKytFQ0hPX04KKytFQ0hPX0MKKytERUZTCisrbWFuZGlyCisrbG9jYWxlZGlyCisrbGliZGlyCisrcHNkaXIKKytwZGZkaXIKKytkdmlkaXIKKytodG1sZGlyCisraW5mb2RpcgorK2RvY2RpcgorK29sZGluY2x1ZGVkaXIKKytpbmNsdWRlZGlyCisrbG9jYWxzdGF0ZWRpcgorK3NoYXJlZHN0YXRlZGlyCisrc3lzY29uZmRpcgorK2RhdGFkaXIKKytkYXRhcm9vdGRpcgorK2xpYmV4ZWNkaXIKKytzYmluZGlyCisrYmluZGlyCisrcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQorK3ByZWZpeAorK2V4ZWNfcHJlZml4CisrUEFDS0FHRV9VUkwKKytQQUNLQUdFX0JVR1JFUE9SVAorK1BBQ0tBR0VfU1RSSU5HCisrUEFDS0FHRV9WRVJTSU9OCisrUEFDS0FHRV9UQVJOQU1FCisrUEFDS0FHRV9OQU1FCisrUEFUSF9TRVBBUkFUT1IKKytTSEVMTCcKKyBhY19zdWJzdF9maWxlcz0nJworK2FjX3VzZXJfb3B0cz0nCisrZW5hYmxlX29wdGlvbl9jaGVja2luZworK2VuYWJsZV9zaWxlbnRfcnVsZXMKKytlbmFibGVfbWFpbnRhaW5lcl9tb2RlCisrZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKKytlbmFibGVfc2hhcmVkCisrZW5hYmxlX3N0YXRpYworK3dpdGhfcGljCisrZW5hYmxlX2Zhc3RfaW5zdGFsbAorK3dpdGhfZ251X2xkCisrd2l0aF9zeXNyb290CisrZW5hYmxlX2xpYnRvb2xfbG9jaworK2VuYWJsZV9kZWJ1ZworK2VuYWJsZV9wcm9maWxlCisrZW5hYmxlX3Rlc3RzCisrd2l0aF9pY3UKKyt3aXRoX2ljdV9pbmNsdWRlcworK3dpdGhfaWN1X2xpYnMKKyt3aXRoX3V1aWQKKyt3aXRoX3V1aWRfaW5jbHVkZXMKKyt3aXRoX3V1aWRfbGlicworK3dpdGhfdHpfZGVmYXVsdAorK3dpdGhfdHpfZGF0YQorK3dpdGhfdHpfaW5jbHVkZXMKKysnCisgICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKKyBob3N0X2FsaWFzCisgdGFyZ2V0X2FsaWFzCitAQCAtOTIzLDYgKzgyNyw4IEBAIENYWENQUCcKKyAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCisgYWNfaW5pdF9oZWxwPQorIGFjX2luaXRfdmVyc2lvbj1mYWxzZQorK2FjX3VucmVjb2duaXplZF9vcHRzPQorK2FjX3VucmVjb2duaXplZF9zZXA9CisgIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyAjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCisgY2FjaGVfZmlsZT0vZGV2L251bGwKK0BAIC05NzgsOCArODg0LDkgQEAgZG8KKyAgIGZpCisgCisgICBjYXNlICRhY19vcHRpb24gaW4KKy0gICo9KikJYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKy0gICopCWFjX29wdGFyZz15ZXMgOzsKKysgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisrICAqPSkgICBhY19vcHRhcmc9IDs7CisrICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CisgICBlc2FjCisgCisgICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorQEAgLTEwMjEsMTMgKzkyOCwyMCBAQCBkbworICAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCistICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisrICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy9bLS5dL18vZydgCistICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CisrICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKysgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisrICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKysgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisrICAgICAgKiIKKysiZW5hYmxlXyRhY191c2Vyb3B0IgorKyIqKSA7OworKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKysgICAgZXNhYworKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworIAorICAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKKyAgICAgYWNfcHJldj1kb2NkaXIgOzsKK0BAIC0xMDQwLDEzICs5NTQsMjAgQEAgZG8KKyAgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCistICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKysgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCistICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKy0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAorLSAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1cJGFjX29wdGFyZyA7OworKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisrICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisrICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorKyAgICAgICoiCisrImVuYWJsZV8kYWNfdXNlcm9wdCIKKysiKikgOzsKKysgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKysgICAgZXNhYworKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworIAorICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorQEAgLTEyMzcsMjIgKzExNTgsMzYgQEAgZG8KKyAgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKyAKKyAgIC13aXRoLSogfCAtLXdpdGgtKikKKy0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKysgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCistICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKy0gICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPVwkYWNfb3B0YXJnIDs7CisrICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKysgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisrICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKysgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisrICAgICAgKiIKKysid2l0aF8kYWNfdXNlcm9wdCIKKysiKikgOzsKKysgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKysJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisrICAgIGVzYWMKKysgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisgCisgICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCistICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisrICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZSB8IHNlZCAncy9bLS5dL18vZydgCistICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1ubyA7OworKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisrICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisrICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorKyAgICAgICoiCisrIndpdGhfJGFjX3VzZXJvcHQiCisrIiopIDs7CisrICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisrCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworKyAgICBlc2FjCisrICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OworIAorICAgLS14KQorICAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCitAQCAtMTI3MiwyNiArMTIwNywyNiBAQCBkbworICAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKyAKKy0gIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKKytUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgICA7OworIAorICAgKj0qKQorICAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgZXhwciAieCRhY19lbnZ2YXIiIDogIi4qW15fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisrICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisrICAgIGVzYWMKKyAgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisgCisgICAqKQorICAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCistICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisrICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKy0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKy0gICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKysgICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCisgICAgIDs7CisgCisgICBlc2FjCitAQCAtMTI5OSwyMyArMTIzNCwzNiBAQCBkb25lCisgCisgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCistICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorK2ZpCisrCisraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorKyAgICBubykgOzsKKysgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CisrICBlc2FjCisgZmkKKyAKKy0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisrIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCisgZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCistCQlzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisrCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKyAJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKyAJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCisgZG8KKyAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KKysgIGNhc2UgJGFjX3ZhbCBpbgorKyAgICAqLyApCisrICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisrICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKysgIGVzYWMKKysgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgICBlc2FjCistICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCisgZG9uZQorIAorICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKK0BAIC0xMzI5LDggKzEyNzcsNiBAQCB0YXJnZXQ9JHRhcmdldF9hbGlhcworIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorLSAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCistICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCisgICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCisgICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgIGZpCitAQCAtMTM0NSwyMyArMTI5MSwyMSBAQCB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisgYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCisgYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorIGFjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAorLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBXb3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCisgdGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CistICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorIAorIAorICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KKyBpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKy0gIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkMCIgfHwKKy0kYXNfZXhwciBYIiQwIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLQkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0JIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKy1lY2hvIFgiJDAiIHwKKysgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAorKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisgCSAgICBzLy9cMS8KKyAJICAgIHEKK0BAIC0xMzg4LDEzICsxMzMyLDExIEBAIGVsc2UKKyBmaQorIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKy0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCisgZmkKKyBhY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCisgYWNfYWJzX2NvbmZkaXI9YCgKKy0JY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCB7IGVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IGFzX2ZuX2Vycm9yICQ/ICIkYWNfbXNnIgorIAlwd2QpYAorICMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCisgaWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorQEAgLTE0MzQsNyArMTM3Niw3IEBAIENvbmZpZ3VyYXRpb246CisgICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCisgICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKyAgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisrICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisgICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKK0BAIC0xNDQyLDkgKzEzODQsOSBAQCBDb25maWd1cmF0aW9uOgorIAorIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorLQkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKysgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorLQkJCSAgW1BSRUZJWF0KKysgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisgCisgQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisgXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK0BAIC0xNDU0LDI1ICsxMzk2LDI1IEBAIGZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisgRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisgCisgRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKy0gIC0tYmluZGlyPURJUiAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCistICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorLSAgLS1saWJleGVjZGlyPURJUiAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCistICAtLXN5c2NvbmZkaXI9RElSICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCistICAtLWxpYmRpcj1ESVIgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCistICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKy0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKy0gIC0tZGF0YXJvb3RkaXI9RElSICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCistICAtLWxvY2FsZWRpcj1ESVIgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorLSAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorLSAgLS1kb2NkaXI9RElSICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9vcGVuY2ZsaXRlXQorLSAgLS1odG1sZGlyPURJUiAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKy0gIC0tZHZpZGlyPURJUiAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKy0gIC0tcGRmZGlyPURJUiAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKy0gIC0tcHNkaXI9RElSICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisrICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKysgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKysgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKysgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKysgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisrICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisrICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKysgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKysgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKysgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL29wZW5jZmxpdGVdCisrICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKysgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorIF9BQ0VPRgorIAorICAgY2F0IDw8XF9BQ0VPRgorQEAgLTE0OTUsMTIgKzE0MzcsMTggQEAgaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKyAgIGNhdCA8PFxfQUNFT0YKKyAKKyBPcHRpb25hbCBGZWF0dXJlczoKKysgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKy0gIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCistCQkJICAoYW5kIHNvbWV0aW1lcyBjb25mdXNpbmcpIHRvIHRoZSBjYXN1YWwgaW5zdGFsbGVyCistICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCistICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworKyAgLS1lbmFibGUtc2lsZW50LXJ1bGVzICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0xIikKKysgIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKQorKyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlCisrICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwgKGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXIKKysgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKysgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCitAQCAtMTUxNSw5ICsxNDYzLDExIEBAIE9wdGlvbmFsIEZlYXR1cmVzOgorIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCistICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKysgIC0td2l0aC1waWNbPVBLR1NdICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLWljdT1ESVIgICAgICAgICAgU3BlY2lmeSBsb2NhdGlvbiBvZiB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZSAoSUNVKSBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCisgICAtLXdpdGgtaWN1LWluY2x1ZGVzPURJUiBTcGVjaWZ5IGxvY2F0aW9uIG9mIEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IKK0BAIC0xNTQ1LDcgKzE0OTUsNyBAQCBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgorICAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorLSAgQ1BQRkxBR1MgICAgQy9DKysvT2JqZWN0aXZlIEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorKyAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICAgQ1hYRkxBR1MgICAgQysrIGNvbXBpbGVyIGZsYWdzCitAQCAtMTU2MywxNSArMTUxMywxNyBAQCBmaQorIGlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorLSAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fCBjb250aW51ZQorKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorKyAgICAgIGNvbnRpbnVlCisgICAgIGFjX2J1aWxkZGlyPS4KKyAKKyBjYXNlICIkYWNfZGlyIiBpbgorIC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICopCistICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisrICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorLSAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC8uLixnO3MsLywsJ2AKKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CitAQCAtMTYwNyw3ICsxNTU5LDcgQEAgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgICAgIGVjaG8gJiYKKyAgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgIGVsc2UKKy0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisgICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgIGRvbmUKK0BAIC0xNjE3LDM3MCArMTU2OSwxMTMxIEBAIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgIGNhdCA8PFxfQUNFT0YKKyBDb3JlRm91bmRhdGlvbiBjb25maWd1cmUgNDc2LjE3LjIKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKKyAKKy1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCistMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisgX0FDRU9GCisgICBleGl0CisgZmkKKy1jYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKKy1UaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorLXJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCistCistSXQgd2FzIGNyZWF0ZWQgYnkgQ29yZUZvdW5kYXRpb24gJGFzX21lIDQ3Ni4xNy4yLCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKy0gICQgJDAgJEAKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAKKy1fQUNFT0YKKy1leGVjIDU+PmNvbmZpZy5sb2cKKysjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKKyB7CistY2F0IDw8X0FTVU5BTUUKKy0jIyAtLS0tLS0tLS0gIyMKKy0jIyBQbGF0Zm9ybS4gIyMKKy0jIyAtLS0tLS0tLS0gIyMKKysgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKysgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorKyAgYWNfc3RhdHVzPSQ/CisrICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisrICBmaQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisrICBhY19yZXR2YWw9MAorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy1ob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorLXVuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorLXVuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorLXVuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorLXVuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorKwlhY19yZXR2YWw9MQorK2ZpCisrICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKysgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorIAorLS91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorLS9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisgCistL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorLS91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy0vdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCistL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorLS9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCistL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKyMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorK2FjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQorK3sKKysgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKysgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorKyAgYWNfc3RhdHVzPSQ/CisrICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisrICBmaQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKysgIGFjX3JldHZhbD0wCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLV9BU1VOQU1FCisrCWFjX3JldHZhbD0xCisrZmkKKysgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisgCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGVjaG8gIlBBVEg6ICRhc19kaXIiCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKyt9ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCisgCistfSA+JjUKKysjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KKythY19mbl9jX3RyeV9jcHAgKCkKKyt7CisrICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisrICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorKyAgYWNfc3RhdHVzPSQ/CisrICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisrICBmaQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuIDoKKysgIGFjX3JldHZhbD0wCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLWNhdCA+JjUgPDxfQUNFT0YKKysgICAgYWNfcmV0dmFsPTEKKytmaQorKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisrICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKyAKKyt9ICMgYWNfZm5fY190cnlfY3BwCisgCistIyMgLS0tLS0tLS0tLS0gIyMKKy0jIyBDb3JlIHRlc3RzLiAjIworLSMjIC0tLS0tLS0tLS0tICMjCisrIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisrIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisrIyBhY2NvcmRpbmdseS4KKythY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCisreworKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworKyAgaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CisraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2ZpCisrZXZhbCBhY19yZXM9XCQkMworKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKytlbHNlCisrICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgdXNhYmlsaXR5Li4uICIgPiY2OyB9CisrY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskNAorKyNpbmNsdWRlIDwkMj4KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCisrZWxzZQorKyAgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorIAorKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CisrY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8JDI+CisgX0FDRU9GCisraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisrICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKytlbHNlCisrICBhY19oZWFkZXJfcHJlcHJvYz1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorIAorKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisrICB5ZXM6bm86ICkKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICA7OworKyAgbm86eWVzOiogKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysoICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisrICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIDs7CisrZXNhYworKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQorK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKKytmaQorK2V2YWwgYWNfcmVzPVwkJDMKKysJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisrZmkKKysgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworIAorLSMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCistIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCistIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCistIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorLSMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorLWFjX2NvbmZpZ3VyZV9hcmdzPQorLWFjX2NvbmZpZ3VyZV9hcmdzMD0KKy1hY19jb25maWd1cmVfYXJnczE9CistYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKKy1mb3IgYWNfcGFzcyBpbiAxIDIKKy1kbworLSAgZm9yIGFjX2FyZworLSAgZG8KKy0gICAgY2FzZSAkYWNfYXJnIGluCistICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKy0gICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKy0gICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCistICAgICAgY29udGludWUgOzsKKy0gICAgKlwnKikKKy0gICAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CistICAgIGVzYWMKKy0gICAgY2FzZSAkYWNfcGFzcyBpbgorLSAgICAxKSBhY19jb25maWd1cmVfYXJnczA9IiRhY19jb25maWd1cmVfYXJnczAgJyRhY19hcmcnIiA7OworLSAgICAyKQorLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCistICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCistCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKy0gICAgICBlbHNlCistCWNhc2UgJGFjX2FyZyBpbgorLQkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorLQkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKy0JICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCistCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCistCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKy0JICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKy0JICAgIGVzYWMKKy0JICAgIDs7CistCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CistCWVzYWMKKy0gICAgICBmaQorLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIgorLSAgICAgIDs7CistICAgIGVzYWMKKy0gIGRvbmUKKy1kb25lCistJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9CistJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9CisrfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKKyAKKy0jIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCistIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKy0jIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKy0jIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKy0jIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCistdHJhcCAnZXhpdF9zdGF0dXM9JD8KKy0gICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorLSAgeworLSAgICBlY2hvCisrIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKysjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorK2FjX2ZuX2NfdHJ5X3J1biAoKQorK3sKKysgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisrICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorKyAgYWNfcmV0dmFsPTAKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKysgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLSAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgIGVjaG8KKy0gICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKy0oCistICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCistICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorLSAgICBjYXNlICRhY192YWwgaW4gIygKKy0gICAgKiR7YXNfbmx9KikKKy0gICAgICBjYXNlICRhY192YXIgaW4gIygKKy0gICAgICAqX2N2XyopIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CistICAgICAgZXNhYworLSAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorLSAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKy0gICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworLSAgICAgIGVzYWMgOzsKKy0gICAgZXNhYworLSAgZG9uZQorLSAgKHNldCkgMj4mMSB8CistICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKy0gICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorLSAgICAgIHNlZCAtbiBcCistCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworLQkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKy0gICAgICA7OyAjKAorLSAgICAqKQorLSAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCistICAgICAgOzsKKy0gICAgZXNhYyB8CistICAgIHNvcnQKKy0pCistICAgIGVjaG8KKysgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKKytmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisrICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKyAKKy0gICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICBlY2hvCistICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKy0gICAgZG8KKy0gICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKy0gICAgICBjYXNlICRhY192YWwgaW4KKy0gICAgICAqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKy0gICAgICBlc2FjCistICAgICAgZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCistICAgIGRvbmUgfCBzb3J0CistICAgIGVjaG8KKyt9ICMgYWNfZm5fY190cnlfcnVuCisgCistICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICAgZWNobworLSAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCistICAgICAgZG8KKy0JZXZhbCBhY192YWw9XCQkYWNfdmFyCistCWNhc2UgJGFjX3ZhbCBpbgorLQkqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKy0JZXNhYworLQllY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKy0gICAgICBkb25lIHwgc29ydAorLSAgICAgIGVjaG8KKy0gICAgZmkKKysjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisrIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKKyt7CisrICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CisraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJDQKKysjaW5jbHVkZSA8JDI+CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZXZhbCAiJDM9eWVzIgorK2Vsc2UKKysgIGV2YWwgIiQzPW5vIgorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytldmFsIGFjX3Jlcz1cJCQzCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgCistICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLSAjIworLSMjIGNvbmZkZWZzLmguICMjCistIyMgLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICBlY2hvCistICAgICAgY2F0IGNvbmZkZWZzLmgKKy0gICAgICBlY2hvCistICAgIGZpCistICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKy0gICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKy0gICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKy0gIH0gPiY1CistICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKy0gICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorLSAgICBleGl0ICRleGl0X3N0YXR1cworLScgMAorLWZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCistZG9uZQorLWFjX3NpZ25hbD0wCisrfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKyAKKy0jIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorLXJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisrIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KKythY19mbl9jX3RyeV9saW5rICgpCisreworKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKysgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorKyAgYWNfc3RhdHVzPSQ/CisrICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisrICBmaQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSB0ZXN0IC14IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuIDoKKysgIGFjX3JldHZhbD0wCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLSMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorKwlhY19yZXR2YWw9MQorK2ZpCisrICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisrICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisrICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisrICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCistX0FDRU9GCistCistCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgorLV9BQ0VPRgorK30gIyBhY19mbl9jX3RyeV9saW5rCisgCisrIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKKythY19mbl9jX2NoZWNrX2Z1bmMgKCkKKyt7CisrICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CisraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCistX0FDRU9GCisrLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworIAorKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCistX0FDRU9GCisrI3VuZGVmICQyCisgCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisrI2VuZGlmCisrY2hhciAkMiAoKTsKKysvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisrICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisrICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCisrY2hva2UgbWUKKysjZW5kaWYKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuICQyICgpOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorIF9BQ0VPRgorLQorLQorLSMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorLSMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCistaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorLSAgc2V0IHggIiRDT05GSUdfU0lURSIKKy1lbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorLSAgc2V0IHggIiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUiICIkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBldmFsICIkMz15ZXMiCisgZWxzZQorLSAgc2V0IHggIiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSIgXAorLQkiJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKysgIGV2YWwgIiQzPW5vIgorIGZpCistc2hpZnQKKy1mb3IgYWNfc2l0ZV9maWxlCistZG8KKy0gIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CistZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CistICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorLSAgICAuICIkYWNfc2l0ZV9maWxlIgorLSAgZmkKKy1kb25lCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytldmFsIGFjX3Jlcz1cJCQzCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgCistaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCistICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorLSAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCistICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CistZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorLSAgICBjYXNlICRjYWNoZV9maWxlIGluCistICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworLSAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKy0gICAgZXNhYworK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKysKKysjIGFjX2ZuX2N4eF90cnlfY3BwIExJTkVOTworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCisrYWNfZm5fY3h4X3RyeV9jcHAgKCkKKyt7CisrICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisrICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorKyAgYWNfc3RhdHVzPSQ/CisrICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICBmaQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbiA6CisrICBhY19yZXR2YWw9MAorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorLSAgPiRjYWNoZV9maWxlCistZmkKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0jIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCistIyB2YWx1ZS4KKy1hY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKKy1mb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworLSAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKy0gIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CistICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCistICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCistICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCistICAgIHNldCwpCistICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKy0gICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworLSAgICAsc2V0KQorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKy0gICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworLSAgICAsKTs7CistICAgICopCistICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorLQl7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKy0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CistZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKKy1lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9CistCWFjX2NhY2hlX2NvcnJ1cHRlZD06CistICAgICAgZmk7OworLSAgZXNhYworLSAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorLSAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCistICAgIGNhc2UgJGFjX25ld192YWwgaW4KKy0gICAgKlwnKikgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworLSAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworLSAgICBlc2FjCistICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorLSAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorLSAgICAgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIiA7OworLSAgICBlc2FjCistICBmaQorLWRvbmUKKy1pZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBhY19yZXR2YWw9MQorIGZpCisrICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKysgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorIAorK30gIyBhY19mbl9jeHhfdHJ5X2NwcAorIAorKyMgYWNfZm5fY3h4X3RyeV9saW5rIExJTkVOTworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorK2FjX2ZuX2N4eF90cnlfbGluayAoKQorK3sKKysgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisrICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKysgIGFjX3N0YXR1cz0kPworKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKysgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKysgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKysgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorKyAgZmkKKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSB0ZXN0IC14IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuIDoKKysgIGFjX3JldHZhbD0wCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKwlhY19yZXR2YWw9MQorK2ZpCisrICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisrICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisrICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisrICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKyAKKyt9ICMgYWNfZm5fY3h4X3RyeV9saW5rCisgCisrIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQorKyMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorK2FjX2ZuX2NfY2hlY2tfdHlwZSAoKQorK3sKKysgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KKytpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgZXZhbCAiJDM9bm8iCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyQ0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICgkMikpCisrCSByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyQ0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICgoJDIpKSkKKysJICAgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKytlbHNlCisrICBldmFsICIkMz15ZXMiCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZXZhbCBhY19yZXM9XCQkMworKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKysgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworIAorK30gIyBhY19mbl9jX2NoZWNrX3R5cGUKKyAKKysjIGFjX2ZuX2NfZmluZF9pbnRYX3QgTElORU5PIEJJVFMgVkFSCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRmluZHMgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKysjIGFjY29yZGluZ2x5LgorK2FjX2ZuX2NfZmluZF9pbnRYX3QgKCkKKyt7CisrICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnQkMl90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50JDJfdC4uLiAiID4mNjsgfQorK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBldmFsICIkMz1ubyIKKysgICAgICMgT3JkZXIgaXMgaW1wb3J0YW50IC0gbmV2ZXIgY2hlY2sgYSB0eXBlIHRoYXQgaXMgcG90ZW50aWFsbHkgc21hbGxlcgorKyAgICAgIyB0aGFuIGhhbGYgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KKysgICAgIGZvciBhY190eXBlIGluIGludCQyX3QgJ2ludCcgJ2xvbmcgaW50JyBcCisrCSAnbG9uZyBsb25nIGludCcgJ3Nob3J0IGludCcgJ3NpZ25lZCBjaGFyJzsgZG8KKysgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKwkgICAgIGVudW0geyBOID0gJDIgLyAyIC0gMSB9OworK2ludAorK21haW4gKCkKKyt7Cisrc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoMCA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpKV07CisrdGVzdF9hcnJheSBbMF0gPSAwOworK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisrCSAgICAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07CisraW50CisrbWFpbiAoKQorK3sKKytzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAxKQorKwkJIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMikpXTsKKyt0ZXN0X2FycmF5IFswXSA9IDA7CisrcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKytlbHNlCisrICBjYXNlICRhY190eXBlIGluICMoCisrICBpbnQkMl90KSA6CisrICAgIGV2YWwgIiQzPXllcyIgOzsgIygKKysgICopIDoKKysgICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OworK2VzYWMKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKKyAKKytlbHNlCisrICBicmVhaworK2ZpCisrICAgICBkb25lCisrZmkKKytldmFsIGFjX3Jlcz1cJCQzCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgCisrfSAjIGFjX2ZuX2NfZmluZF9pbnRYX3QKKyAKKysjIGFjX2ZuX2NfZmluZF91aW50WF90IExJTkVOTyBCSVRTIFZBUgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBGaW5kcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2l0aCB3aWR0aCBCSVRTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgorKyMgYWNjb3JkaW5nbHkuCisrYWNfZm5fY19maW5kX3VpbnRYX3QgKCkKKyt7CisrICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aW50JDJfdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQkMl90Li4uICIgPiY2OyB9CisraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGV2YWwgIiQzPW5vIgorKyAgICAgIyBPcmRlciBpcyBpbXBvcnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCisrICAgICAjIHRoYW4gaGFsZiBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHdpZHRoLgorKyAgICAgZm9yIGFjX3R5cGUgaW4gdWludCQyX3QgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCisrCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKCRhY190eXBlKSAtMSA+PiAoJDIgLyAyIC0gMSkpID4+ICgkMiAvIDIgLSAxKSA9PSAzKV07CisrdGVzdF9hcnJheSBbMF0gPSAwOworK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBjYXNlICRhY190eXBlIGluICMoCisrICB1aW50JDJfdCkgOgorKyAgICBldmFsICIkMz15ZXMiIDs7ICMoCisrICAqKSA6CisrICAgIGV2YWwgIiQzPVwkYWNfdHlwZSIgOzsKKytlc2FjCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiQzIlwiID0geCJubyI7IHRoZW4gOgorIAorK2Vsc2UKKysgIGJyZWFrCisrZmkKKysgICAgIGRvbmUKKytmaQorK2V2YWwgYWNfcmVzPVwkJDMKKysJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisrICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAKKyt9ICMgYWNfZm5fY19maW5kX3VpbnRYX3QKKyAKKysjIGFjX2ZuX2NfY2hlY2tfbWVtYmVyIExJTkVOTyBBR0dSIE1FTUJFUiBWQVIgSU5DTFVERVMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRyaWVzIHRvIGZpbmQgaWYgdGhlIGZpZWxkIE1FTUJFUiBleGlzdHMgaW4gdHlwZSBBR0dSLCBhZnRlciBpbmNsdWRpbmcKKysjIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KKythY19mbl9jX2NoZWNrX21lbWJlciAoKQorK3sKKysgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuJDMuLi4gIiA+JjY7IH0KKytpZiBldmFsIFwkeyQ0Kzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskNQorK2ludAorK21haW4gKCkKKyt7Cisrc3RhdGljICQyIGFjX2FnZ3I7CisraWYgKGFjX2FnZ3IuJDMpCisrcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZXZhbCAiJDQ9eWVzIgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJDUKKytpbnQKKyttYWluICgpCisreworK3N0YXRpYyAkMiBhY19hZ2dyOworK2lmIChzaXplb2YgYWNfYWdnci4kMykKKytyZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBldmFsICIkND15ZXMiCisrZWxzZQorKyAgZXZhbCAiJDQ9bm8iCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZXZhbCBhY19yZXM9XCQkNAorKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKysgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworIAorK30gIyBhY19mbl9jX2NoZWNrX21lbWJlcgorIAorKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRlc3RzIHdoZXRoZXIgU1lNQk9MIGlzIGRlY2xhcmVkIGluIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgorKyMgYWNjb3JkaW5nbHkuCisrYWNfZm5fY19jaGVja19kZWNsICgpCisreworKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworKyAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKKysgIGFzX2RlY2xfdXNlPWBlY2hvICQyfHNlZCAtZSAncy8oLygoLycgLWUgJ3MvKS8pIDAmLycgLWUgJ3MvLC8pIDAmICgvZydgCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CisraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJDQKKytpbnQKKyttYWluICgpCisreworKyNpZm5kZWYgJGFzX2RlY2xfbmFtZQorKyNpZmRlZiBfX2NwbHVzcGx1cworKyAgKHZvaWQpICRhc19kZWNsX3VzZTsKKysjZWxzZQorKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisrI2VuZGlmCisrI2VuZGlmCisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZXZhbCAiJDM9eWVzIgorK2Vsc2UKKysgIGV2YWwgIiQzPW5vIgorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytldmFsIGFjX3Jlcz1cJCQzCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgCisrfSAjIGFjX2ZuX2NfY2hlY2tfZGVjbAorK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCisrcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKyAKKytJdCB3YXMgY3JlYXRlZCBieSBDb3JlRm91bmRhdGlvbiAkYXNfbWUgNDc2LjE3LjIsIHdoaWNoIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIAorKyAgJCAkMCAkQAorIAorLWFjX2V4dD1jCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKy1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisrX0FDRU9GCisrZXhlYyA1Pj5jb25maWcubG9nCisreworK2NhdCA8PF9BU1VOQU1FCisrIyMgLS0tLS0tLS0tICMjCisrIyMgUGxhdGZvcm0uICMjCisrIyMgLS0tLS0tLS0tICMjCisrCisraG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyt1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKyt1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKyt1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKyt1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKysKKysvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKysvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKysKKysvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisrL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCisrL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisrCisrX0FTVU5BTUUKKysKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrfSA+JjUKKysKKytjYXQgPiY1IDw8X0FDRU9GCisrCisrCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyBDb3JlIHRlc3RzLiAjIworKyMjIC0tLS0tLS0tLS0tICMjCisrCisrX0FDRU9GCisrCisrCisrIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKysjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKysjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKysjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisrIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCisrYWNfY29uZmlndXJlX2FyZ3M9CisrYWNfY29uZmlndXJlX2FyZ3MwPQorK2FjX2NvbmZpZ3VyZV9hcmdzMT0KKythY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorK2ZvciBhY19wYXNzIGluIDEgMgorK2RvCisrICBmb3IgYWNfYXJnCisrICBkbworKyAgICBjYXNlICRhY19hcmcgaW4KKysgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKysgICAgICBjb250aW51ZSA7OworKyAgICAqXCcqKQorKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgIGVzYWMKKysgICAgY2FzZSAkYWNfcGFzcyBpbgorKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OworKyAgICAyKQorKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisrICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisrCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKysgICAgICBlbHNlCisrCWNhc2UgJGFjX2FyZyBpbgorKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKysJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisrCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisrCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKysJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKysJICAgIGVzYWMKKysJICAgIDs7CisrCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKKysgICAgICA7OworKyAgICBlc2FjCisrICBkb25lCisrZG9uZQorK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KKyt7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CisrCisrIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisrIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisrIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisrIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgorK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKysgIHsKKysgICAgZWNobworKworKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorKyAgICBlY2hvCisrICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisrKAorKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICAgY2FzZSAkYWNfdmFsIGluICMoCisrICAgICoke2FzX25sfSopCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKysgICAgICBlc2FjCisrICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisrICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisrICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKysgICAgICBlc2FjIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysgIChzZXQpIDI+JjEgfAorKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisrICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKysgICAgICBzZWQgLW4gXAorKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisrICAgICAgOzsgIygKKysgICAgKikKKysgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorKyAgICAgIDs7CisrICAgIGVzYWMgfAorKyAgICBzb3J0CisrKQorKyAgICBlY2hvCisrCisrICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIE91dHB1dCB2YXJpYWJsZXMuICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisrICAgIGVjaG8KKysgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworKyAgICBkbworKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKysgICAgICBlc2FjCisrICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorKyAgICBkb25lIHwgc29ydAorKyAgICBlY2hvCisrCisrICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKysgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorKyAgICAgIGVjaG8KKysgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworKyAgICAgIGRvCisrCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKwljYXNlICRhY192YWwgaW4KKysJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworKwllc2FjCisrCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKysgICAgICBkb25lIHwgc29ydAorKyAgICAgIGVjaG8KKysgICAgZmkKKysKKysgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCisrICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjCisrIyMgY29uZmRlZnMuaC4gIyMKKysjIyAtLS0tLS0tLS0tLSAjIyIKKysgICAgICBlY2hvCisrICAgICAgY2F0IGNvbmZkZWZzLmgKKysgICAgICBlY2hvCisrICAgIGZpCisrICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKysgICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisrICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorKyAgfSA+JjUKKysgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisrICAgIGV4aXQgJGV4aXRfc3RhdHVzCisrJyAwCisrZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisrICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKKytkb25lCisrYWNfc2lnbmFsPTAKKysKKysjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisrCisrJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAorKworKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKKytfQUNFT0YKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCisrX0FDRU9GCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorK19BQ0VPRgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCisrX0FDRU9GCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKKytfQUNFT0YKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorK19BQ0VPRgorKworKworKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorKyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCisrYWNfc2l0ZV9maWxlMT1OT05FCisrYWNfc2l0ZV9maWxlMj1OT05FCisraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKysgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorKyAgICAtKikgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKysgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKysgIGVzYWMKKytlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisrICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCisrZWxzZQorKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKysgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorK2ZpCisrZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKKytkbworKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKysgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKysgICAgLiAiJGFjX3NpdGVfZmlsZSIgXAorKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKythc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisrICBmaQorK2RvbmUKKysKKytpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKysgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisrICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisrICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKysgICAgZXNhYworKyAgZmkKKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKysgID4kY2FjaGVfZmlsZQorK2ZpCisrCisrYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3RkbGliLmgiCisrYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiCisrYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3BhcmFtLmgiCisrIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorKyMgdmFsdWUuCisrYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisrZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKysgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisrICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorKyAgICBzZXQsKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisrICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKysgICAgLHNldCkKKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisrICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKysgICAgLCk7OworKyAgICAqKQorKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKysJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisrCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKysJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisrCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisrCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKysJZWxzZQorKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKysJZmkKKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisrICAgICAgZmk7OworKyAgZXNhYworKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisrICAgIGNhc2UgJGFjX25ld192YWwgaW4KKysgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKysgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKysgICAgZXNhYworKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKysgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKysgICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CisrICAgIGVzYWMKKysgIGZpCisrZG9uZQorK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisrICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKKytmaQorKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKworK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCisgCisgCitAQCAtMjAxOCw5ICsyNzMxLDcgQEAgZm9yIGFjX2RpciBpbiBjb25maWcgIiRzcmNkaXIiL2NvbmZpZzsgZG8KKyAgIGZpCisgZG9uZQorIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIGNvbmZpZyBcIiRzcmNkaXJcIi9jb25maWciID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBjb25maWcgXCIkc3JjZGlyXCIvY29uZmlnIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBjb25maWcgXCIkc3JjZGlyXCIvY29uZmlnIiAiJExJTkVOTyIgNQorIGZpCisgCisgIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCitAQCAtMjA1Niw3ICsyNzY3LDcgQEAgYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBpbmNsdWRlL2NvbmZpZy5oIgorICMgdmVyc2lvbiBhbGxvd2VkIGFuZCB0aGF0IHdlIGFyZSBub3QgYW4gb2ZmaWNpYWwgR05VIHBhY2thZ2UsIGJ1dAorICMgcmF0aGVyIGEgbm9uLUdOVSBwYWNrYWdlIGxldmVyYWdpbmcgYXV0b21ha2UuCisgIworLWFtX19hcGlfdmVyc2lvbj0nMS4xMCcKKythbV9fYXBpX3ZlcnNpb249JzEuMTQnCisgCisgIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisgIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCitAQCAtMjA3MSwyMiArMjc4MiwyMyBAQCBhbV9fYXBpX3ZlcnNpb249JzEuMTAnCisgIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorICMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjY7IH0KKysjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9CisgaWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCistaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCistY2FzZSAkYXNfZGlyLyBpbgorLSAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKysgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCisrY2FzZSAkYXNfZGlyLyBpbiAjKCgKKysgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorLSAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisrICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgIC91c3IvdWNiLyogKSA7OworICAgKikKKyAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KK0BAIC0yMDk0LDcgKzI4MDYsNyBAQCBjYXNlICRhc19kaXIvIGluCisgICAgICMgYnkgZGVmYXVsdC4KKyAgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLQlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisrCWlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorIAkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorIAkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorQEAgLTIxMDQsMTcgKzI4MTYsMjkgQEAgY2FzZSAkYXNfZGlyLyBpbgorIAkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisgCSAgICA6CisgCSAgZWxzZQorLQkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorLQkgICAgYnJlYWsgMworKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisrCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKysJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKysJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKysJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisrCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworKwkgICAgdGhlbgorKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICAgIGJyZWFrIDMKKysJICAgIGZpCisgCSAgZmkKKyAJZmkKKyAgICAgICBkb25lCisgICAgIGRvbmUKKyAgICAgOzsKKyBlc2FjCistZG9uZQorKworKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKytybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKyAKKyBmaQorICAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KK0BAIC0yMTI3LDggKzI4NTEsOCBAQCBmaQorICAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgICBmaQorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CisrJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KKyAKKyAjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisgIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK0BAIC0yMTM4LDkxICsyODYyLDIyNiBAQCB0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworIAorIHRlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAkRUNIT19DIiA+JjY7IH0KKy0jIEp1c3QgaW4gY2FzZQorLXNsZWVwIDEKKy1lY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKy0jIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAiID4mNjsgfQorKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisrIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorK2FtX2xmPScKKysnCisrY2FzZSBgcHdkYCBpbgorKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZl0qKQorKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1OzsKKytlc2FjCisrY2FzZSAkc3JjZGlyIGluCisrICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogJyRzcmNkaXInIiAiJExJTkVOTyIgNTs7CisrZXNhYworKworKyMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyAjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyAjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisgIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyAjIGRpcmVjdG9yeSkuCisgaWYgKAorLSAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCistICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCistICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKy0gICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKy0gICBmaQorLSAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKKy0gICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorLSAgICAgICYmIHRlc3QgIiQqIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorLQorLSAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKy0gICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCistICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorLSAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKy0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCistYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorLWFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgZmkKKy0KKysgICBhbV9oYXNfc2xlcHQ9bm8KKysgICBmb3IgYW1fdHJ5IGluIDEgMjsgZG8KKysgICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQorKyAgICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorKyAgICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCisrCSMgLUwgZGlkbid0IHdvcmsuCisrCXNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisrICAgICBmaQorKyAgICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKysJJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisrCisrCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKysJIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorKwkjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisrCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKysJYXNfZm5fZXJyb3IgJD8gImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KKysgIGFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CisrICAgICBmaQorKyAgICAgaWYgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4KKysgICAgICAgYnJlYWsKKysgICAgIGZpCisrICAgICAjIEp1c3QgaW4gY2FzZS4KKysgICAgIHNsZWVwIDEKKysgICAgIGFtX2hhc19zbGVwdD15ZXMKKysgICBkb25lCisgICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQorICAgICkKKyB0aGVuCisgICAgIyBPay4KKyAgICA6CisgZWxzZQorLSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorLUNoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKKy1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICBhc19mbl9lcnJvciAkPyAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCisrQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyskYXNfZWNobyAieWVzIiA+JjY7IH0KKysjIElmIHdlIGRpZG4ndCBzbGVlcCwgd2Ugc3RpbGwgbmVlZCB0byBlbnN1cmUgdGltZSBzdGFtcHMgb2YgY29uZmlnLnN0YXR1cyBhbmQKKysjIGdlbmVyYXRlZCBmaWxlcyBhcmUgc3RyaWN0bHkgbmV3ZXIuCisrYW1fc2xlZXBfcGlkPQorK2lmIGdyZXAgJ3NsZXB0OiBubycgY29uZnRlc3QuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICggc2xlZXAgMSApICYKKysgIGFtX3NsZWVwX3BpZD0kIQorK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZmlsZQorKworIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisgIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCisgdGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCistIyBEb3VibGUgYW55IFwgb3IgJC4gIGVjaG8gbWlnaHQgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorKyMgRG91YmxlIGFueSBcIG9yICQuCisgIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KKy1jYXQgPDxcX0FDRU9GID5jb25mdGVzdC5zZWQKKy1zL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCistX0FDRU9GCistcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gZWNobyAkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSB8IHNlZCAtZiBjb25mdGVzdC5zZWRgCistcm0gLWYgY29uZnRlc3Quc2VkCisrYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YCRhc19lY2hvICIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgfCBzZWQgIiRhY19zY3JpcHQiYAorIAorICMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKKyBhbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCisgCistdGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCisraWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisrICBjYXNlICRhbV9hdXhfZGlyIGluCisrICAqXCAqIHwgKlwJKikKKysgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworKyAgKikKKysgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisrICBlc2FjCisrZmkKKyAjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKKy1pZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorLSAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKKytpZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgorKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HICIKKyBlbHNlCisgICBhbV9taXNzaW5nX3J1bj0KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICdtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KKytmaQorKworK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisrICBjYXNlICRhbV9hdXhfZGlyIGluCisrICAqXCAqIHwgKlwJKikKKysgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKysgICopCisrICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorKyAgZXNhYworK2ZpCisrCisrIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgJ3N0cmlwJyB3aGVuIHRoZSB1c2VyCisrIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKysjIHdpbGwgaG9ub3IgdGhlICdTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisrICBhY19jdF9TVFJJUD0kU1RSSVAKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCisraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKysgICAgU1RSSVA9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKysgIGZpCisrZWxzZQorKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorK2ZpCisrCisgZmkKKytJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICRFQ0hPX0MiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CisgaWYgdGVzdCAteiAiJE1LRElSX1AiOyB0aGVuCistICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbworKyAgICBmb3IgYWNfcHJvZyBpbiBta2RpciBnbWtkaXI7IGRvCisgCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0JICAgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfSB8fCBjb250aW51ZQorKwkgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIHx8IGNvbnRpbnVlCisgCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKyAJICAgICAnbWtkaXIgKEdOVSBjb3JldXRpbHMpICcqIHwgXAorIAkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKK0BAIC0yMjMyLDExICszMDkxLDEyIEBAIGRvCisgCSAgIGVzYWMKKyAJIGRvbmUKKyAgICAgICAgZG9uZQorLWRvbmUKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyAKKysgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgICBNS0RJUl9QPSIkYWNfY3ZfcGF0aF9ta2RpciAtcCIKKyAgIGVsc2UKK0BAIC0yMjQ0LDI3ICszMTA0LDIwIEBAIGZpCisgICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorLSAgICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgorICAgZmkKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1LRElSX1AiID4mNQorLWVjaG8gIiR7RUNIT19UfSRNS0RJUl9QIiA+JjY7IH0KKy0KKy1ta2Rpcl9wPSIkTUtESVJfUCIKKy1jYXNlICRta2Rpcl9wIGluCistICBbXFwvJF0qIHwgPzpbXFwvXSopIDs7CistICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7CistZXNhYworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1CisrJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKyAKKyBmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKKyBkbworICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfQVdLKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK0BAIC0yMjc0LDQzICszMTI3LDQ0IEBAIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKy1kb25lCisrICBkb25lCisgSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBBV0s9JGFjX2N2X3Byb2dfQVdLCisgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JEFXSyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CisrJGFzX2VjaG8gIiRBV0siID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorICAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKKyBkb25lCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNjsgfQorLXNldCB4ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKy1pZiB7IGFzX3Zhcj1hY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9Cisrc2V0IHggJHtNQUtFLW1ha2V9CisrYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisraWYgZXZhbCBcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCisgU0hFTEwgPSAvYmluL3NoCisgYWxsOgorIAlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworIF9BQ0VPRgorLSMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KKyBjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKK0BAIC0yMzIwLDEyICszMTc0LDEyIEBAIGVzYWMKKyBybSAtZiBjb25mdGVzdC5tYWtlCisgZmkKKyBpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisrJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICBTRVRfTUFLRT0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCisgZmkKKyAKK0BAIC0yMzM4LDE1ICszMTkyLDUyIEBAIGVsc2UKKyBmaQorIHJtZGlyIC50c3QgMj4vZGV2L251bGwKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworK2ZpCisrCisrY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiAjICgoKAorKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKysgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisrICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworK2VzYWMKKythbV9tYWtlPSR7TUFLRS1tYWtlfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KKytpZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQorK0JBUjA9ZmFsc2UKKytCQVIxPXRydWUKKytWPTEKKythbV9fZG9pdDoKKysJQCQoVFJVRSkKKysuUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKKytlbHNlCisrICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworK2ZpCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKKyskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KKytpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorKyAgICBBTV9WPSckKFYpJworKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKKytlbHNlCisrICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorK2ZpCisrQU1fQkFDS1NMQVNIPSdcJworKworIGlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJworICAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFzX2ZuX2Vycm9yICQ/ICJzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgIiRMSU5FTk8iIDUKKyAgIGZpCisgZmkKKyAKK0BAIC0yMzkwLDE0MSArMzI4MSw4OCBAQCBBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KKyAKKyBNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KKyAKKy1pbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iXCQoU0hFTEwpICRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQorKyMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54CisrIyBkaWVzIG91dCBmb3IgZ29vZC4gIEZvciBtb3JlIGJhY2tncm91bmQsIHNlZToKKysjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAwMS5odG1sPgorKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+CisrbWtkaXJfcD0nJChNS0RJUl9QKScKKyAKKy0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKy0jIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CistIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorLSMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCistaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKy0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCistICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorLWVsc2UKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKysjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorKyMgc29tZSBwbGF0Zm9ybXMuCisrIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKysjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KKytBTVRBUj0nJCR7VEFSLXRhcn0nCisgCistZmkKKy1maQorLVNUUklQPSRhY19jdl9wcm9nX1NUUklQCistaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCisgCisrIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorK19hbV90b29scz0nZ251dGFyICBwYXggY3BpbyBub25lJworIAorLWZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCistICBhY19jdF9TVFJJUD0kU1RSSVAKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKythbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFyZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJworIAorLWZpCistZmkKKy1hY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAorLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKy1maQorIAorLSAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCistICAgIFNUUklQPSI6IgorLSAgZWxzZQorLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisteWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorLWFjX3Rvb2xfd2FybmVkPXllcyA7OworLWVzYWMKKy0gICAgU1RSSVA9JGFjX2N0X1NUUklQCistICBmaQorLWVsc2UKKy0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKy1maQorIAorLWZpCistSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKKyAKKy0jIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorLSMgc29tZSBwbGF0Zm9ybXMuCistIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorIAorLUFNVEFSPSR7QU1UQVItIiR7YW1fbWlzc2luZ19ydW59dGFyIn0KKyAKKy1hbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLScKKysjIFBPU0lYIHdpbGwgc2F5IGluIGEgZnV0dXJlIHZlcnNpb24gdGhhdCBydW5uaW5nICJybSAtZiIgd2l0aCBubyBhcmd1bWVudAorKyMgaXMgT0s7IGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gbWFrZSB0aGF0IGFzc3VtcHRpb24gaW4gb3VyIE1ha2VmaWxlCisrIyByZWNpcGVzLiAgU28gdXNlIGFuIGFnZ3Jlc3NpdmUgcHJvYmUgdG8gY2hlY2sgdGhhdCB0aGUgdXNhZ2Ugd2Ugd2FudCBpcworKyMgYWN0dWFsbHkgc3VwcG9ydGVkICJpbiB0aGUgd2lsZCIgdG8gYW4gYWNjZXB0YWJsZSBkZWdyZWUuCisrIyBTZWUgYXV0b21ha2UgYnVnIzEwODI4LgorKyMgVG8gbWFrZSBhbnkgaXNzdWUgbW9yZSB2aXNpYmxlLCBjYXVzZSB0aGUgcnVubmluZyBjb25maWd1cmUgdG8gYmUgYWJvcnRlZAorKyMgYnkgZGVmYXVsdCBpZiB0aGUgJ3JtJyBwcm9ncmFtIGluIHVzZSBkb2Vzbid0IG1hdGNoIG91ciBleHBlY3RhdGlvbnM7IHRoZQorKyMgdXNlciBjYW4gc3RpbGwgb3ZlcnJpZGUgdGhpcyB0aG91Z2guCisraWYgcm0gLWYgJiYgcm0gLWZyICYmIHJtIC1yZjsgdGhlbiA6IE9LOyBlbHNlCisrICBjYXQgPiYyIDw8J0VORCcKKytPb3BzIQorIAorK1lvdXIgJ3JtJyBwcm9ncmFtIHNlZW1zIHVuYWJsZSB0byBydW4gd2l0aG91dCBmaWxlIG9wZXJhbmRzIHNwZWNpZmllZAorK29uIHRoZSBjb21tYW5kIGxpbmUsIGV2ZW4gd2hlbiB0aGUgJy1mJyBvcHRpb24gaXMgcHJlc2VudC4gIFRoaXMgaXMgY29udHJhcnkKKyt0byB0aGUgYmVoYXZpb3VyIG9mIG1vc3Qgcm0gcHJvZ3JhbXMgb3V0IHRoZXJlLCBhbmQgbm90IGNvbmZvcm1pbmcgd2l0aAorK3RoZSB1cGNvbWluZyBQT1NJWCBzdGFuZGFyZDogPGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTU0Mj4KKyAKKytQbGVhc2UgdGVsbCBidWctYXV0b21ha2VAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSB2YWx1ZQorK29mIHlvdXIgJFBBVEggYW5kIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gIFRoaXMKKytjYW4gaGVscCB1cyBpbXByb3ZlIGZ1dHVyZSBhdXRvbWFrZSB2ZXJzaW9ucy4KKysKKytFTkQKKysgIGlmIHRlc3QgeCIkQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0iID0geCJ5ZXMiOyB0aGVuCisrICAgIGVjaG8gJ0NvbmZpZ3VyYXRpb24gd2lsbCBwcm9jZWVkIGFueXdheSwgc2luY2UgeW91IGhhdmUgc2V0IHRoZScgPiYyCisrICAgIGVjaG8gJ0FDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIHZhcmlhYmxlIHRvICJ5ZXMiJyA+JjIKKysgICAgZWNobyA+JjIKKysgIGVsc2UKKysgICAgY2F0ID4mMiA8PCdFTkQnCisrQWJvcnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgdG8gZW5zdXJlIHlvdSB0YWtlIG5vdGljZSBvZiB0aGUgaXNzdWUuCisgCisrWW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBHTlUgY29yZXV0aWxzIHRvIGdldCBhbiAncm0nIGltcGxlbWVudGF0aW9uCisrdGhhdCBiZWhhdmVzIHByb3Blcmx5OiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8+LgorIAorK0lmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgdXNpbmcgeW91ciBwcm9ibGVtYXRpYworKydybScgYW55d2F5LCBleHBvcnQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEFDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNCisrdG8gInllcyIsIGFuZCByZS1ydW4gY29uZmlndXJlLgorIAorK0VORAorKyAgICBhc19mbl9lcnJvciAkPyAiWW91ciAncm0nIHByb2dyYW0gaXMgYmFkLCBzb3JyeS4iICIkTElORU5PIiA1CisrICBmaQorK2ZpCisgCisgIworICMgRW5hYmxlIG1haW50YWluZXIgbW9kZSB0byBwcmV2ZW50IHRoZSBwYWNrYWdlIGZyb20gY29uc3RhbnRseSB0cnlpbmcKKyAjIHRvIHJlYnVpbGQgY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgZXRjLiBSZWJ1aWxkaW5nIHN1Y2ggZmlsZXMgcmFyZWx5LAorICMgaWYgZXZlciwgbmVlZHMgdG8gYmUgZG9uZSAiaW4gdGhlIGZpZWxkIi4KKyAjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gIiA+JjY7IH0KKyAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuCisraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX21haW50YWluZXJfbW9kZTsgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsCisgZWxzZQorICAgVVNFX01BSU5UQUlORVJfTU9ERT1ubworIGZpCisgCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kVVNFX01BSU5UQUlORVJfTU9ERSIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQorKyRhc19lY2hvICIkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY2OyB9CisgICAgaWYgdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllczsgdGhlbgorICAgTUFJTlRBSU5FUl9NT0RFX1RSVUU9CisgICBNQUlOVEFJTkVSX01PREVfRkFMU0U9JyMnCitAQCAtMjU0MiwzNSArMzM4MCwyNyBAQCBmaQorICMKKyAjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCisgJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2J1aWxkKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCisgdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAorIHRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQorIGFjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfYnVpbGQiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorIGNhc2UgJGFjX2N2X2J1aWxkIGluCisgKi0qLSopIDs7CistKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7CisgZXNhYworIGJ1aWxkPSRhY19jdl9idWlsZAorIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK0BAIC0yNTg2LDI4ICszNDE2LDI0IEBAIElGUz0kYWNfc2F2ZV9JRlMKKyBjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworIAorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9ob3N0Kzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKyAgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCisgZWxzZQorICAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKy0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisgZmkKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CisgY2FzZSAkYWNfY3ZfaG9zdCBpbgorICotKi0qKSA7OworLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OworIGVzYWMKKyBob3N0PSRhY19jdl9ob3N0CisgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworQEAgLTI2MjQsOCArMzQ1MCw4IEBAIGNhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisgCisgCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1cHBvcnRlZCBkZXBsb3ltZW50IHRhcmdldCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VwcG9ydGVkIGRlcGxveW1lbnQgdGFyZ2V0Li4uICRFQ0hPX0MiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1cHBvcnRlZCBkZXBsb3ltZW50IHRhcmdldCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1cHBvcnRlZCBkZXBsb3ltZW50IHRhcmdldC4uLiAiID4mNjsgfQorIAorIGNhc2UgJHtob3N0X29zfSBpbgorIAkqZGFyd2luKikKK0BAIC0yNjQ5LDE2ICszNDc1LDE0IEBAIGNhc2UgJHtob3N0X29zfSBpbgorIAkJOzsKKyAKKyAJKikKKy0JCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZmFpbGVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH1mYWlsZWQiID4mNjsgfQorLQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5zdXBwb3J0ZWQgZGVwbG95bWVudCB0YXJnZXQgJHtob3N0X29zfSIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogVW5zdXBwb3J0ZWQgZGVwbG95bWVudCB0YXJnZXQgJHtob3N0X29zfSIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CisrCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KKysJCWFzX2ZuX2Vycm9yICQ/ICJVbnN1cHBvcnRlZCBkZXBsb3ltZW50IHRhcmdldCAke2hvc3Rfb3N9IiAiJExJTkVOTyIgNTsKKyAJCTs7CisgZXNhYworIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHtkZXBsb3ltZW50X3RhcmdldH0iID4mNQorLWVjaG8gIiR7RUNIT19UfSR7ZGVwbG95bWVudF90YXJnZXR9IiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtkZXBsb3ltZW50X3RhcmdldH0iID4mNQorKyRhc19lY2hvICIke2RlcGxveW1lbnRfdGFyZ2V0fSIgPiY2OyB9CisgCisgIworICMgQ2hlY2tzIGZvciBwcm9ncmFtcworQEAgLTI2NzEsMTAgKzM0OTUsMTAgQEAgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorQEAgLTI2ODQsMjUgKzM1MDgsMjUgQEAgZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorQEAgLTI3MTEsMTAgKzM1MzUsMTAgQEAgaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgICBhY19jdF9DQz0kQ0MKKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitAQCAtMjcyNCwyNSArMzU0OCwyNSBAQCBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKKyBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorICAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCitAQCAtMjc1MCwxMiArMzU3NCw4IEBAIGZpCisgICBlbHNlCisgICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyB5ZXM6KQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKyBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIENDPSRhY19jdF9DQworQEAgLTI3NjgsMTAgKzM1ODgsMTAgQEAgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK0BAIC0yNzgxLDI1ICszNjAxLDI1IEBAIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorQEAgLTI4MDgsMTAgKzM2MjgsMTAgQEAgZmkKKyBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK0BAIC0yODIyLDE4ICszNjQyLDE4IEBAIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgIGNvbnRpbnVlCisgICAgICBmaQorICAgICBhY19jdl9wcm9nX0NDPSJjYyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCitAQCAtMjg1MiwxMSArMzY3MiwxMSBAQCBmaQorIGZpCisgQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorQEAgLTI4NjcsMTAgKzM2ODcsMTAgQEAgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgZG8KKyAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitAQCAtMjg4MCwyNSArMzcwMCwyNSBAQCBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKy1kb25lCisrICBkb25lCisgSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKyBDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CisrJGFzX2VjaG8gIiRDQyIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCitAQCAtMjkxMSwxMCArMzczMSwxMCBAQCBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgZG8KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorQEAgLTI5MjQsMjUgKzM3NDQsMjUgQEAgZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKKyBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorQEAgLTI5NTQsMTIgKzM3NzQsOCBAQCBkb25lCisgICBlbHNlCisgICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyB5ZXM6KQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKyBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIENDPSRhY19jdF9DQworQEAgLTI5NjksNTEgKzM3ODUsMzcgQEAgZmkKKyBmaQorIAorIAorLXRlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICistU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrdGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisrYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorIAorICMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CistYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAorLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy17IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKyskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKKytzZXQgWCAkYWNfY29tcGlsZQorK2FjX2NvbXBpbGVyPSQyCisrZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorIGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisgZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9CisrICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorKyAgICBzZWQgJzEwYVwKKysuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisrICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorK2RvbmUKKyAKKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0zMDI1LDQyICszODI3LDM4IEBAIG1haW4gKCkKKyB9CisgX0FDRU9GCisgYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKKy1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKyAjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisgIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorICMgb2YgZXhlZXh0LgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2OyB9CistYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorLSMKKy0jIExpc3Qgb2YgcG9zc2libGUgb3V0cHV0IGZpbGVzLCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4KKy0jIFRoZSBhbGdvcml0aG0gaXMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopCistIyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuICBiLm91dCBpcyBjcmVhdGVkIGJ5IGk5NjAgY29tcGlsZXJzLgorLWFjX2ZpbGVzPSdhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0JworLSMKKy0jIFRoZSBJUklYIDYgbGlua2VyIHdyaXRlcyBpbnRvIGV4aXN0aW5nIGZpbGVzIHdoaWNoIG1heSBub3QgYmUKKy0jIGV4ZWN1dGFibGUsIHJldGFpbmluZyB0aGVpciBwZXJtaXNzaW9ucy4gIFJlbW92ZSB0aGVtIGZpcnN0IHNvIGEKKy0jIHN1YnNlcXVlbnQgZXhlY3V0aW9uIHRlc3Qgd29ya3MuCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CisrYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKysKKysjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CisrYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKysKKyBhY19ybWZpbGVzPQorIGZvciBhY19maWxlIGluICRhY19maWxlcworIGRvCisgICBjYXNlICRhY19maWxlIGluCistICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgIGVzYWMKKyBkb25lCisgcm0gLWYgJGFjX3JtZmlsZXMKKyAKKy1pZiB7IChhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCisraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKKyBjYXNlICIoKCRhY190cnkiIGluCisgICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworIGVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyAjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworICMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCitAQCAtMzA3MCwxNCArMzg2OCwxNCBAQCBmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKKyBkbworICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgICBjYXNlICRhY19maWxlIGluCistICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkKKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorIAk7OworICAgICBbYWJdLm91dCApCisgCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisgCSMgY2VydGFpbmx5IHJpZ2h0LgorIAlicmVhazs7CisgICAgICouKiApCistICAgICAgICBpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKysJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisgCXRoZW4gOjsgZWxzZQorIAkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKyAJZmkKK0BAIC0zMDk2LDc4ICszODk0LDQxIEBAIHRlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorIGVsc2UKKyAgIGFjX2ZpbGU9JycKKyBmaQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjY7IH0KKy1pZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4KKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCistU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisreyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorIGZpCistCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KKyBhY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorIAorLSMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCistIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKy0jIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCistIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KKy1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKy0gIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJworLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfdHJ5IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgICBjcm9zc19jb21waWxpbmc9bm8KKy0gIGVsc2UKKy0gICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorLQljcm9zc19jb21waWxpbmc9eWVzCistICAgIGVsc2UKKy0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCistSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCistU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgIGZpCistICBmaQorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CistCistcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0Cisrcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKKyBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorLSMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCistIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2OyB9CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KKytpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKKyBjYXNlICIoKCRhY190cnkiIGluCisgICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworIGVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisgIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisgIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKK0BAIC0zMTc1LDkzICszOTM2LDE0MSBAQCBldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgICBjYXNlICRhY19maWxlIGluCistICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKyAJICBicmVhazs7CisgICAgICogKSBicmVhazs7CisgICBlc2FjCisgZG9uZQorIGVsc2UKKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKKy1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyBmaQorLQorLXJtIC1mIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2OyB9Cisrcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKyAKKyBybSAtZiBjb25mdGVzdC4kYWNfZXh0CisgRVhFRVhUPSRhY19jdl9leGVleHQKKyBhY19leGVleHQ9JEVYRUVYVAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKytjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorKyNpbmNsdWRlIDxzdGRpby5oPgorIGludAorIG1haW4gKCkKKyB7CisrRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKysgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworIAorICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKythY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKysjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisrICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKKyBjYXNlICIoKCRhY190cnkiIGluCisgICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworIGVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQorK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCistICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworLSAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworLSAgY2FzZSAkYWNfZmlsZSBpbgorLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgKSA7OworLSAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKy0gICAgICAgYnJlYWs7OworLSAgZXNhYworLWRvbmUKKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisrICAgIGNyb3NzX2NvbXBpbGluZz1ubworKyAgZWxzZQorKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisrCWNyb3NzX2NvbXBpbGluZz15ZXMKKysgICAgZWxzZQorKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisrYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KKytJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorKyAgICBmaQorKyAgZmkKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisrCisrcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CisrYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorK2lmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCisraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKysgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisrICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CisrICBjYXNlICRhY19maWxlIGluCisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CisrICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorKyAgICAgICBicmVhazs7CisrICBlc2FjCisrZG9uZQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKKy1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKKy1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyt7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisrYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyBmaQorLQorIHJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorIE9CSkVYVD0kYWNfY3Zfb2JqZXh0CisgYWNfb2JqZXh0PSRPQkpFWFQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTMyNzUsNTQgKzQwODQsMzQgQEAgbWFpbiAoKQorICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY29tcGlsZXJfZ251PXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jb21waWxlcl9nbnU9bm8KKysgIGFjX2NvbXBpbGVyX2dudT1ubworIGZpCistCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorIAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CistR0NDPWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CisraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisrICBHQ0M9eWVzCisrZWxzZQorKyAgR0NDPQorK2ZpCisgYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorIGFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgIENGTEFHUz0iLWciCistICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMzMzMywzNCArNDEyMiwxMSBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9wcm9nX2NjX2c9eWVzCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCUNGTEFHUz0iIgorLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIENGTEFHUz0iIgorKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMzM3MSwzNSArNDEzNywxMiBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIDoKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgCistCWFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworK2Vsc2UKKysgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworIAkgQ0ZMQUdTPSItZyIKKy0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMzQxMCw0MiArNDE1MywxOCBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9wcm9nX2NjX2c9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCisgZmkKKy0KKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCitAQCAtMzQ2MSwyMyArNDE4MCwxOCBAQCBlbHNlCisgICAgIENGTEFHUz0KKyAgIGZpCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCisgYWNfc2F2ZV9DQz0kQ0MKKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorK3N0cnVjdCBzdGF0OworIC8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KKyBzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CisgRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK0BAIC0zNTI5LDMxICs0MjQzLDkgQEAgZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorIAktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorIGRvCisgICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKy0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCisgZmkKKy0KKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworIGRvbmUKK0BAIC0zNTY0LDIzICs0MjU2LDg0IEBAIGZpCisgIyBBQ19DQUNIRV9WQUwKKyBjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICAgeCkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNjsgfSA7OworKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgICB4bm8pCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorLWVjaG8gIiR7RUNIT19UfXVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAgKikKKyAgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKKyBlc2FjCisraWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKysKKytmaQorKworK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisrCisrYWNfZXh0PWMKKythY19jcHA9JyRDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9CisraWYgJHthbV9jdl9wcm9nX2NjX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKysgICMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorKyAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQorKyAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCisrICAjIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KKysgIGFtX2N2X3Byb2dfY2NfY19vPXllcworKyAgZm9yIGFtX2kgaW4gMSAyOyBkbworKyAgICBpZiB7IGVjaG8gIiRhc19tZTokTElORU5POiAkQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCIgPiY1CisrICAgKCRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0KSA+JjUgMj4mNQorKyAgIGFjX3N0YXR1cz0kPworKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSBcCisrICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dDsgdGhlbgorKyAgICAgIDogT0sKKysgICAgZWxzZQorKyAgICAgIGFtX2N2X3Byb2dfY2NfY19vPW5vCisrICAgICAgYnJlYWsKKysgICAgZmkKKysgIGRvbmUKKysgIHJtIC1mIGNvcmUgY29uZnRlc3QqCisrICB1bnNldCBhbV9pCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3Byb2dfY2NfY19vIiA+JjUKKyskYXNfZWNobyAiJGFtX2N2X3Byb2dfY2NfY19vIiA+JjY7IH0KKytpZiB0ZXN0ICIkYW1fY3ZfcHJvZ19jY19jX28iICE9IHllczsgdGhlbgorKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisrICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKysgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKysgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisrICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKysgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCisrZmkKKyBhY19leHQ9YworIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworIERFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKyAKKyBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCitAQCAtMzU4OSw1MCArNDM0Miw1MSBAQCBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCisgYW1fbWFrZT0ke01BS0UtbWFrZX0KKyBjYXQgPiBjb25maW5jIDw8ICdFTkQnCisgYW1fX2RvaXQ6CistCUBlY2hvIGRvbmUKKysJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisgLlBIT05ZOiBhbV9fZG9pdAorIEVORAorICMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gJEVDSE9fQyIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CisgYW1fX2luY2x1ZGU9IiMiCisgYW1fX3F1b3RlPQorIF9hbV9yZXN1bHQ9bm9uZQorICMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCisgZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKKy0jIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCistIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAorLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCistIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCistaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCistICAgYW1fX2luY2x1ZGU9aW5jbHVkZQorLSAgIGFtX19xdW90ZT0KKy0gICBfYW1fcmVzdWx0PUdOVQorLWZpCisrIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgorK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisrKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisrICBhbV9faW5jbHVkZT1pbmNsdWRlCisrICBhbV9fcXVvdGU9CisrICBfYW1fcmVzdWx0PUdOVQorKyAgOzsKKytlc2FjCisgIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCisgaWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKy0gICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCistICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKy0gICAgICBhbV9fcXVvdGU9IlwiIgorLSAgICAgIF9hbV9yZXN1bHQ9QlNECistICAgZmkKKysgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKysgICAgIGFtX19xdW90ZT0iXCIiCisrICAgICBfYW1fcmVzdWx0PUJTRAorKyAgICAgOzsKKysgICBlc2FjCisgZmkKKyAKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kX2FtX3Jlc3VsdCIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKyskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQorIHJtIC1mIGNvbmZpbmMgY29uZm1mCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgorLWlmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKytpZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CisgZmkKKyAKKyBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgICBBTURFUEJBQ0tTTEFTSD0nXCcKKysgIGFtX19ub2RlcD0nX25vJworIGZpCisgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICAgQU1ERVBfVFJVRT0KK0BAIC0zNjQ2LDE3ICs0NDAwLDE4IEBAIGZpCisgCisgZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KKytpZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCistICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CistICAjIGluIEQnLgorKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAorKyAgIyBpbiBEIi4KKysgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCitAQCAtMzY3NCw2ICs0NDI5LDExIEBAIGVsc2UKKyAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICAgZmkKKysgIGFtX191bml2ZXJzYWw9ZmFsc2UKKysgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKysgICAgIGVzYWMKKysKKyAgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorQEAgLTM2ODUsMzUgKzQ0NDUsNDkgQEAgZWxzZQorICAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCistICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKy0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKysgICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorKyAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAorICAgICBkb25lCisgICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKyAKKysgICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisrICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisrICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCisrICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisrICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgICBjYXNlICRkZXBtb2RlIGluCisrICAgIGdjYykKKysgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisrICAgICAgOzsKKyAgICAgbm9zaWRlZWZmZWN0KQorLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKysgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKysgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorICAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorIAljb250aW51ZQorICAgICAgIGVsc2UKKyAJYnJlYWsKKyAgICAgICBmaQorICAgICAgIDs7CisrICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKysgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisrICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorKyAgICAgIGFtX19taW51c19vYmo9CisrICAgICAgOzsKKyAgICAgbm9uZSkgYnJlYWsgOzsKKyAgICAgZXNhYworLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKy0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKy0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCisgICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisrICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKy0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKK0BAIC0zNzM3LDggKzQ1MTEsOCBAQCBlbHNlCisgZmkKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorIENDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorIAorICBpZgorQEAgLTM3NjYsMTAgKzQ1NDAsMTAgQEAgaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgIGRvCisgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitAQCAtMzc3OSwyNSArNDU1MywyNSBAQCBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgQ1hYPSRhY19jdl9wcm9nX0NYWAorIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQorLWVjaG8gIiR7RUNIT19UfSRDWFgiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorKyRhc19lY2hvICIkQ1hYIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKK0BAIC0zODEwLDEwICs0NTg0LDEwIEBAIGlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgZG8KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X0NYWCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitAQCAtMzgyMywyNSArNDU5NywyNSBAQCBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCisgYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAorIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKK0BAIC0zODUzLDEyICs0NjI3LDggQEAgZG9uZQorICAgZWxzZQorICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisgeWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBDWFg9JGFjX2N0X0NYWAorQEAgLTM4NjgsNDkgKzQ2MzgsMzYgQEAgZmkKKyAgIGZpCisgZmkKKyAjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CistYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAorLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy17IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKyskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorK3NldCBYICRhY19jb21waWxlCisrYWNfY29tcGlsZXI9JDIKKytmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisrICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCisgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKyBlc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQorK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKysgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisrICAgIHNlZCAnMTBhXAorKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKysgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisrICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrZG9uZQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMzkyNCw1NCArNDY4MSwzNCBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY29tcGlsZXJfZ251PXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jb21waWxlcl9nbnU9bm8KKysgIGFjX2NvbXBpbGVyX2dudT1ubworIGZpCistCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CistR1hYPWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQorK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorKyAgR1hYPXllcworK2Vsc2UKKysgIEdYWD0KKytmaQorIGFjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CisgYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2crc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKyAgICBDWFhGTEFHUz0iLWciCistICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMzk4MiwzNCArNDcxOSwxMSBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JQ1hYRkxBR1M9IiIKKy0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBDWFhGTEFHUz0iIgorKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtNDAyMCwzNSArNDczNCwxMiBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorIAorLQlhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisrZWxzZQorKyAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworIAkgQ1hYRkxBR1M9Ii1nIgorLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC00MDU5LDQyICs0NzUwLDE4IEBAIG1haW4gKCkKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9wcm9nX2N4eF9nPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQorIGZpCistCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy0KKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jeHhfZyIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCisgICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorQEAgLTQxMTgsMTcgKzQ3ODUsMTggQEAgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorIGRlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQorK2lmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCistICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CistICAjIGluIEQnLgorKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAorKyAgIyBpbiBEIi4KKysgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCitAQCAtNDE0Niw2ICs0ODE0LDExIEBAIGVsc2UKKyAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICAgZmkKKysgIGFtX191bml2ZXJzYWw9ZmFsc2UKKysgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKysgICAgIGVzYWMKKysKKyAgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorQEAgLTQxNTcsMzUgKzQ4MzAsNDkgQEAgZWxzZQorICAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCistICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKy0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKysgICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorKyAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAorICAgICBkb25lCisgICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKyAKKysgICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisrICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisrICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCisrICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisrICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgICBjYXNlICRkZXBtb2RlIGluCisrICAgIGdjYykKKysgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisrICAgICAgOzsKKyAgICAgbm9zaWRlZWZmZWN0KQorLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKysgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKysgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorICAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorIAljb250aW51ZQorICAgICAgIGVsc2UKKyAJYnJlYWsKKyAgICAgICBmaQorICAgICAgIDs7CisrICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKysgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisrICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorKyAgICAgIGFtX19taW51c19vYmo9CisrICAgICAgOzsKKyAgICAgbm9uZSkgYnJlYWsgOzsKKyAgICAgZXNhYworLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKy0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKy0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCisgICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisrICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKy0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKK0BAIC00MjA5LDggKzQ4OTYsOCBAQCBlbHNlCisgZmkKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KKyBDWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorIAorICBpZgorQEAgLTQyMjQsMTU4ICs0OTExLDI0IEBAIGVsc2UKKyBmaQorIAorIAorKyRhc19lY2hvICIjZGVmaW5lIF9CU0RfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBfQlNEX1NPVVJDRSAxCistX0FDRU9GCistCistCistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIF9HTlVfU09VUkNFIDEKKy1fQUNFT0YKKyAKKyAKKy1pZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gJEVDSE9fQyIgPiY2OyB9CisrYWNfZXh0PWMKKythY19jcHA9JyRDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCisraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKysgIENQUD0KKyBmaQorLXNldCBkdW1teSAkQ0M7IGFjX2NjPWBlY2hvICQyIHwKKy0JCSAgICAgIHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCistaWYgeyBhc192YXI9YWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX287IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy1pbnQKKy1tYWluICgpCisteworLQorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLSMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorLSMgV2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuCistIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KKy1hY190cnk9JyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKKy1ybSAtZiBjb25mdGVzdDIuKgorLWlmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07CistdGhlbgorLSAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz15ZXMKKy0gIGlmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgorLSAgICAjIFRlc3QgZmlyc3QgdGhhdCBjYyBleGlzdHMgYXQgYWxsLgorLSAgICBpZiB7IGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistICB7IChjYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICAgICAgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKKy0gICAgICBybSAtZiBjb25mdGVzdDIuKgorLSAgICAgIGlmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0JIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfdHJ5IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsKKy0gICAgICB0aGVuCistCSMgY2Mgd29ya3MgdG9vLgorLQk6CistICAgICAgZWxzZQorLQkjIGNjIGV4aXN0cyBidXQgZG9lc24ndCBsaWtlIC1vLgorLQlldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCistICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistZWxzZQorLSAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz1ubworLWZpCistcm0gLWYgY29yZSBjb25mdGVzdCoKKy0KKy1maQorLWlmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vID0geWVzOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxCistX0FDRU9GCistCistZmkKKy0KKy0jIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKKy0jIHRoZXJlIGlzIG5vIG90aGVyIHdheS4KKy1zZXQgZHVtbXkgJENDCistYWNfY2M9YGVjaG8gJDIgfCBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nYAorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCistICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKy0gICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorLSAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorLSAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKy0gICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorLSAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKKy1maQorLQorLQorLWFjX2V4dD1jCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKy1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2OyB9CistIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KKy1pZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorLSAgQ1BQPQorLWZpCistaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKy0gIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKysgIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCitAQCAtNDM4OSwxMSArNDk0Miw3IEBAIGRvCisgICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KK0BAIC00NDAyLDc2ICs0OTUxLDM0IEBAIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAjZW5kaWYKKyAJCSAgICAgU3ludGF4IGVycm9yCisgX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICA6CistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgCisrZWxzZQorICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorIGNvbnRpbnVlCisgZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KKyBfQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKytpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCisgY29udGludWUKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKyAgICMgUGFzc2VzIGJvdGggdGVzdHMuCisgYWNfcHJlcHJvY19vaz06CisgYnJlYWsKKyBmaQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorIAorIGRvbmUKKyAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCisrcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgIGJyZWFrCisgZmkKKyAKK0BAIC00NDgzLDggKzQ5OTAsOCBAQCBmaQorIGVsc2UKKyAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KKyBhY19wcmVwcm9jX29rPWZhbHNlCisgZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCisgZG8KK0BAIC00NDk0LDExICs1MDAxLDcgQEAgZG8KKyAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorQEAgLTQ1MDcsODMgKzUwMTAsNDAgQEAgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICNlbmRpZgorIAkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIDoKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKytpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKytlbHNlCisgICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisgY29udGludWUKKyBmaQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorIAorICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorIF9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKyBjb250aW51ZQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKyBhY19wcmVwcm9jX29rPToKKyBicmVhaworIGZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgCisgZG9uZQorICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CistaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKy0gIDoKKytybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorKworIGVsc2UKKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKKy1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKythc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyBmaQorIAorIGFjX2V4dD1jCitAQCAtNDU5MiwxNjAgKzUwNTIsNDUgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorLSMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorLSMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorLSMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCistIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCistIyBJUklYIC9zYmluL2luc3RhbGwKKy0jIEFJWCAvYmluL2luc3RhbGwKKy0jIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKy0jIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworLSMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworLSMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKy0jIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKy0jIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCistaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorLWNhc2UgJGFzX2Rpci8gaW4KKy0gIC4vIHwgLi8vIHwgL2NDLyogfCBcCistICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKy0gID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAorLSAgL3Vzci91Y2IvKiApIDs7CistICAqKQorLSAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorLSAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKy0gICAgIyBieSBkZWZhdWx0LgorLSAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCistICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0JICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorLQkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorLQkgICAgOgorLQkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0JICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0JICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorLQkgICAgOgorLQkgIGVsc2UKKy0JICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKy0JICAgIGJyZWFrIDMKKy0JICBmaQorLQlmaQorLSAgICAgIGRvbmUKKy0gICAgZG9uZQorLSAgICA7OworLWVzYWMKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLQorLWZpCistICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorLSAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKy0gIGVsc2UKKy0gICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorLSAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCistICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCistICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKy0gICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorLSAgZmkKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJElOU1RBTEwiID4mNQorLWVjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjY7IH0KKy0KKy0jIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCistIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KKy10ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCistCistdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKy0KKy10ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworLQorLWNhc2UgYHB3ZGAgaW4KKy0gICpcICogfCAqXAkqKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKKy1lc2FjCistCistCistCistbWFjcm9fdmVyc2lvbj0nMi4yLjQnCistbWFjcm9fcmV2aXNpb249JzEuMjk3NicKKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKyAKKy0KKy0KKy1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKy0gICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCistICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCistICAgICBkb25lCistICAgICBlY2hvICIkYWNfc2NyaXB0IiB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorLSAgICAgJGFzX3Vuc2V0IGFjX3NjcmlwdCB8fCBhY19zY3JpcHQ9CistICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInNlZCBnc2VkIiB0byB1c2UgaW4gbXNnIG91dHB1dAorLWlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCistc2V0IGR1bW15IHNlZCBnc2VkOyBhY19wcm9nX25hbWU9JDIKKy1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCistIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisrICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKysgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorLSAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorLSAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKy0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKKy1jYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKysgICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfR1JFUCIgfHwgY29udGludWUKKysjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisrICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKyAqR05VKikKKy0gIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisgKikKKyAgIGFjX2NvdW50PTAKKy0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisrICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgIHdoaWxlIDoKKyAgIGRvCisgICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCistICAgIGVjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorLSAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCistICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCistICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorLSAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCistICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKysgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgICBmaQorICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworQEAgLTQ3NTMsMTY4ICs1MDk4LDYxIEBAIGNhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisgZXNhYworIAorLQorLSAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMworKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworKyAgICBkb25lCisrICBkb25lCisgICBkb25lCistZG9uZQorLQorLWRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCistCistCistZmkKKy0KKy1TRUQ9IiRhY19jdl9wYXRoX1NFRCIKKy1pZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy1maQorLQorKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKysgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisrICBmaQorIGVsc2UKKy0gIGFjX2N2X3BhdGhfU0VEPSRTRUQKKysgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorIGZpCisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKy0gU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCistICBybSAtZiBjb25mdGVzdC5zZWQKKy0KKy10ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCistWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJncmVwIGdncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAorLWlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorLXNldCBkdW1teSBncmVwIGdncmVwOyBhY19wcm9nX25hbWU9JDIKKy1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKy0jIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCistICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKy0gICAgIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorLSAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKKy1jYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCistKkdOVSopCistICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKy0qKQorLSAgYWNfY291bnQ9MAorLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPiJjb25mdGVzdC5pbiIKKy0gIHdoaWxlIDoKKy0gIGRvCistICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCistICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKy0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCistICAgIGVjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKy0gICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKy0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworLSAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCistICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCistICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorLSAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CistICAgIGZpCistICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKy0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCistICBkb25lCistICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKy1lc2FjCistCistCistICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworLSAgZG9uZQorLWRvbmUKKy0KKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLQorLWZpCistCistR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKy1pZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistZmkKKy0KKy1lbHNlCistICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKKy1maQorLQorLQorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKy0gR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorIAorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZWdyZXAuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICAgZWxzZQorLSAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJlZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKKy1pZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCistc2V0IGR1bW15IGVncmVwOyBhY19wcm9nX25hbWU9JDIKKy1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorLSMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKy0gICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCistICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisrICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCisrIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorIGNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisgKkdOVSopCisgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyAqKQorICAgYWNfY291bnQ9MAorLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPiJjb25mdGVzdC5pbiIKKysgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICAgd2hpbGUgOgorICAgZG8KKyAgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKy0gICAgZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCistICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisrICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorQEAgLTQ5MjYsNjQxICs1MTY0LDQ0MCBAQCBjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7CisgZXNhYworIAorLQorLSAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworKyAgICBkb25lCisrICBkb25lCisgICBkb25lCistZG9uZQorLQorLWRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCistCistCistZmkKKy0KKy1FR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCistaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy1maQorLQorKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisrICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKysgIGZpCisgZWxzZQorICAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKKyBmaQorIAorLQorICAgIGZpCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorICBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisgCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfRkdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCistICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKy0gICBlbHNlCistICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImZncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAorLWlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKy1zZXQgZHVtbXkgZmdyZXA7IGFjX3Byb2dfbmFtZT0kMgorLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCistIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCistICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRkdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0ZHUkVQIjsgfSB8fCBjb250aW51ZQorLSAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorLSAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCistY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKy0qR05VKikKKy0gIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworLSopCistICBhY19jb3VudD0wCistICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorLSAgd2hpbGUgOgorLSAgZG8KKy0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKy0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorLSAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKy0gICAgZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKy0gICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCistICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKy0gICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKy0gICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKy0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKy0gICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKy0gICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKy0gICAgZmkKKy0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorLSAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKy0gIGRvbmUKKy0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworLWVzYWMKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGZsb2F0Lmg+CisgCisraW50CisrbWFpbiAoKQorK3sKKyAKKy0gICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworLSAgZG9uZQorLWRvbmUKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKytlbHNlCisrICBhY19jdl9oZWFkZXJfc3RkYz1ubworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrX0FDRU9GCisraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgCisrZWxzZQorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorK3JtIC1mIGNvbmZ0ZXN0KgorIAorLUZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKy1pZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIGZpCisgCisraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKysgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK19BQ0VPRgorK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKysgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysKKyBlbHNlCistICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorK3JtIC1mIGNvbmZ0ZXN0KgorIAorLQorLSAgIGZpCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CistIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKyAKKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorKyAgOgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKysjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisrIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorKyNlbHNlCisrIyBkZWZpbmUgSVNMT1dFUihjKSBcCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisrI2VuZGlmCisrCisrI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKKytpbnQKKyttYWluICgpCisreworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrICAgICAgcmV0dXJuIDI7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgCistdGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorK2Vsc2UKKysgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisrZmkKKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisrICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorK2ZpCisgCisrZmkKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQorK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorIAorK2ZpCisgCisrIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KKytmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKysJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorK2RvIDoKKysgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKythY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorKyIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisrX0FDRU9GCisgCisrZmkKKyAKKytkb25lCisgCisgCisgCisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWluaXgvY29uZmlnLmgiICJhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPSB4eWVzOyB0aGVuIDoKKysgIE1JTklYPXllcworK2Vsc2UKKysgIE1JTklYPQorK2ZpCisgCisgCisrICBpZiB0ZXN0ICIkTUlOSVgiID0geWVzOyB0aGVuCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKyAKKyAKKyskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfMV9TT1VSQ0UgMiIgPj5jb25mZGVmcy5oCisgCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgX01JTklYIDEiID4+Y29uZmRlZnMuaAorIAorKyAgZmkKKyAKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHdpdGhfZ251X2xkPW5vCistZmkKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistYWNfcHJvZz1sZAorLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2OyB9CistICBjYXNlICRob3N0IGluCistICAqLSotbWluZ3cqKQorLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CistICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKy0gICopCistICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKy0gIGVzYWMKKy0gIGNhc2UgJGFjX3Byb2cgaW4KKy0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCistICAgIFtcXC9dKiB8ID86W1xcL10qKQorLSAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKy0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKy0gICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKy0gICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCistCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorLSAgICAgIGRvbmUKKy0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKy0gICAgICA7OworLSAgIiIpCistICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorLSAgICBhY19wcm9nPWxkCistICAgIDs7CistICAqKQorLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCistICAgIHdpdGhfZ251X2xkPXVua25vd24KKy0gICAgOzsKKy0gIGVzYWMKKy1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KKysjICAgICAgICAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKysgICAgICAgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllcworIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KKyBmaQorLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCistICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCistICAgIElGUz0iJGx0X3NhdmVfaWZzIgorLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKy0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKy0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorLSAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCistCTs7CistICAgICAgKikKKy0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKy0JOzsKKy0gICAgICBlc2FjCistICAgIGZpCistICBkb25lCistICBJRlM9IiRsdF9zYXZlX2lmcyIKKy1lbHNlCistICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorLWZpCistZmkKKy0KKy1MRD0iJGx0X2N2X3BhdGhfTEQiCistaWYgdGVzdCAtbiAiJExEIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRMRCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistdGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCistY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKy0qR05VKiB8ICond2l0aCBCRkQnKikKKy0gIGx0X2N2X3Byb2dfZ251X2xkPXllcworLSAgOzsKKy0qKQorLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKy0gIDs7CistZXNhYworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cistd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCistCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY2OyB9CisrICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorKyAgICAkYXNfZWNobyAiI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxIiA+PmNvbmZkZWZzLmgKKyAKKysgICRhc19lY2hvICIjZGVmaW5lIF9BTExfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorIAorKyAgJGFzX2VjaG8gIiNkZWZpbmUgX0dOVV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisgCisrICAkYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMSIgPj5jb25mZGVmcy5oCisgCisrICAkYXNfZWNobyAiI2RlZmluZSBfVEFOREVNX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKyAKKyAKKyAKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCistICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy0gIGx0X2N2X3BhdGhfTk09IiROTSIKKy1lbHNlCistICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKy0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKy0gICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKy0gIGZpCistICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKy0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKy0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKy0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorLSAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorLSAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKy0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCistCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CistCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKy0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCistCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorLQkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCistCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKy0JICBicmVhaworLQkgIDs7CistCSopCistCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCistCSAgKi9kZXYvbnVsbCopCistCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorLQkgICAgYnJlYWsKKy0JICAgIDs7CistCSAgKikKKy0JICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CistCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworLQkgICAgOzsKKy0JICBlc2FjCistCSAgOzsKKy0JZXNhYworLSAgICAgIGZpCistICAgIGRvbmUKKy0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCistICBkb25lCistICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KKy1maQorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKysjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgorK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisrICBDUFA9CisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CistaWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKy0gIE5NPSIkbHRfY3ZfcGF0aF9OTSIKKy1lbHNlCistICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKy0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gIGZvciBhY19wcm9nIGluICJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyIKKy0gIGRvCistICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCistICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorKyAgICBkbworKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKytmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKyBkbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CistICAgIGJyZWFrIDIKKy0gIGZpCistZG9uZQorLWRvbmUKKy1JRlM9JGFzX3NhdmVfSUZTCisrICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisrICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKysgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisrICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorKwkJICAgICBTeW50YXggZXJyb3IKKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKytlbHNlCisrICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisrY29udGludWUKKyBmaQorLWZpCistRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCistaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kRFVNUEJJTiIgPiY2OyB9Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorKworKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKysgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKytjb250aW51ZQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgICMgUGFzc2VzIGJvdGggdGVzdHMuCisrYWNfcHJlcHJvY19vaz06CisrYnJlYWsKKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKysKKytkb25lCisrIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCisrcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKysgIGJyZWFrCisgZmkKKyAKKysgICAgZG9uZQorKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisgCistICAgIHRlc3QgLW4gIiREVU1QQklOIiAmJiBicmVhaworLSAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJERVTVBCSU4iOyB0aGVuCistICBhY19jdF9EVU1QQklOPSREVU1QQklOCistICBmb3IgYWNfcHJvZyBpbiAiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiCistZG8KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIENQUD0kYWNfY3ZfcHJvZ19DUFAKKyBlbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKysgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyskYXNfZWNobyAiJENQUCIgPiY2OyB9CisrYWNfcHJlcHJvY19vaz1mYWxzZQorK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworIGRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKysgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKysgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKysgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisrICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisrCQkgICAgIFN5bnRheCBlcnJvcgorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorIAorLWZpCistZmkKKy1hY19jdF9EVU1QQklOPSRhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4KKy1pZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9EVU1QQklOIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisrY29udGludWUKKyBmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKyAKKysgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisrICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKysgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCisrY29udGludWUKKytlbHNlCisrICAjIFBhc3NlcyBib3RoIHRlc3RzLgorK2FjX3ByZXByb2Nfb2s9OgorK2JyZWFrCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisgCistICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKKyBkb25lCisrIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCisrcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAKKy0gIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCistICAgIERVTVBCSU49IjoiCistICBlbHNlCistICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKy15ZXM6KQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CistYWNfdG9vbF93YXJuZWQ9eWVzIDs7CistZXNhYworLSAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCistICBmaQorK2Vsc2UKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKythc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyBmaQorIAorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCistICAgIE5NPSIkRFVNUEJJTiIKKy0gIGZpCistZmkKKy10ZXN0IC16ICIkTk0iICYmIE5NPW5tCisgCisrY2FzZSBgcHdkYCBpbgorKyAgKlwgKiB8ICpcCSopCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworK2VzYWMKKyAKKyAKKyAKKyttYWNyb192ZXJzaW9uPScyLjQuMicKKyttYWNyb19yZXZpc2lvbj0nMS4zMzM3JworIAorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X25tX2ludGVyZmFjZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKy0gIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjUzNTM6ICRhY19jb21waWxlXCIiID4mNSkKKy0gIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjUzNTY6ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorLSAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjUzNTk6IG91dHB1dFwiIiA+JjUpCistICBjYXQgY29uZnRlc3Qub3V0ID4mNQorLSAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorLSAgZmkKKy0gIHJtIC1mIGNvbmZ0ZXN0KgorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9CistTE5fUz0kYXNfbG5fcworLWlmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNjsgfQorLWZpCisgCistIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgICBpPTAKKy0gIHRlc3RzdHJpbmc9IkFCQ0QiCistCistICBjYXNlICRidWlsZF9vcyBpbgorLSAgbXNkb3NkamdwcCopCistICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKy0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworLSAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorLSAgICA7OworLQorLSAgZ251KikKKy0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCistICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CistICAgIDs7CistCistICBjeWd3aW4qIHwgbWluZ3cqKQorLSAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorLSAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCistICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKy0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CistICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworLSAgICA7OworIAorLSAgYW1pZ2FvcyopCistICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKy0gICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CistICAgIDs7CisgCistICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorLSAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKy0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKy0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKy0gICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKy0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCistICAgIGVsc2UKKy0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKy0gICAgZmkKKy0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKy0gICAgOzsKKyAKKy0gIGludGVyaXgqKQorLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorLSAgICA7OworIAorLSAgb3NmKikKKy0gICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCistICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CistICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCistICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKy0gICAgIworLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCistICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworLSAgICAgIGVzYWMKKy0gICAgZmkKKy0gICAgOzsKKy0gIHNjbzMuMnY1KikKKy0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorLSAgICA7OworLSAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCistICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCistICAgIGVsc2UKKy0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKy0gICAgZmkKKy0gICAgOzsKKy0gICopCistICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorLSAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCistICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKy0gICAgZWxzZQorLSAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKy0gICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCistICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKy0gICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworLSAgICAgIGRvbmUKKy0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorLSAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCistICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKy0gICAgICAjIHdlIGNhbid0IHRlbGwuCistICAgICAgd2hpbGUgeyB0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKy0JICAgICAgICAgPSAiWFgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKy0JICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCistICAgICAgZG8KKy0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAorLSAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCistICAgICAgZG9uZQorLSAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKy0gICAgICB0ZXN0c3RyaW5nPQorLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKy0gICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorLSAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCistICAgIGZpCistICAgIDs7CistICBlc2FjCisgCistZmkKKyAKKy1pZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2OyB9CistZmkKKy1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisgCisgCisgCisrbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgCisrIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCisgCisrIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisrZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworIAorLTogJHtDUD0iY3AgLWYifQorLTogJHtNVj0ibXYgLWYifQorLTogJHtSTT0icm0gLWYifQorKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisrIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICRFQ0hPX0MiID4mNjsgfQorLSMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisteHNpX3NoZWxsPW5vCistKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorLSAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCistICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCistICAmJiB4c2lfc2hlbGw9eWVzCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKy1lY2hvICIke0VDSE9fVH0keHNpX3NoZWxsIiA+JjY7IH0KKysjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisgCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCisrbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAkRUNIT19DIiA+JjY7IH0KKy1sdF9zaGVsbF9hcHBlbmQ9bm8KKy0oIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKy0gICAgPi9kZXYvbnVsbCAyPiYxIFwKKy0gICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQorK0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisrRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisrRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisrICBFQ0hPPSdwcmludCAtciAtLScKKytlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorKyAgRUNITz0ncHJpbnRmICVzXG4nCisrZWxzZQorKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisrICB7CisrICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCisrJDEKKytfTFRFQ0hPX0VPRicKKysgIH0KKysgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKKytmaQorIAorKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKysjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCisrZnVuY19lY2hvX2FsbCAoKQorK3sKKysgICAgJEVDSE8gIiIKKyt9CisgCistaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBsdF91bnNldD11bnNldAorLWVsc2UKKy0gIGx0X3Vuc2V0PWZhbHNlCistZmkKKytjYXNlICIkRUNITyIgaW4KKysgIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQorKyRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OworKyAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQorKyRhc19lY2hvICJwcmludCAtciIgPiY2OyB9IDs7CisrICAqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2F0IiA+JjUKKyskYXNfZWNobyAiY2F0IiA+JjY7IH0gOzsKKytlc2FjCisgCisgCisgCisgCisgCistIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorLWNhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKy0gQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKy0gICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorLSAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKy0gIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKy0gIDs7CistICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorLSAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCistICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKy0gIDs7CistZXNhYworIAorIAorIAorQEAgLTU1NzAsMzMgKzU2MDcsNzcgQEAgZXNhYworIAorIAorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CistcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCistY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKy0iIiB8ICIgIiopIDs7CistKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7CistZXNhYworLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKy1jYXNlICRob3N0X29zIGluCistICBkYXJ3aW4qKQorLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKy0gICAgZWxzZQorLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKysgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisrICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorKyAgICAgZG9uZQorKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKysgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKysgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisrICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKysgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX1NFRCIgfHwgY29udGludWUKKysjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKKytjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKysqR05VKikKKysgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKyopCisrICBhY19jb3VudD0wCisrICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKysgIHdoaWxlIDoKKysgIGRvCisrICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisrICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKysgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisrICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKysgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisrICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisrICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKysgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgIGZpCistICAgIDs7CisrICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKysgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisrICBkb25lCisrICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKyBlc2FjCisgCisrICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKysgICAgZG9uZQorKyAgZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KKysgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKysgIGZpCisrZWxzZQorKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorK2ZpCisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKysgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisrICBybSAtZiBjb25mdGVzdC5zZWQKKyAKKyt0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCisrWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorIAorIAorIAorQEAgLTU2MDQsMjA0ICs1Njg1LDE5OSBAQCBlc2FjCisgCisgCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworLWx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorLSMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKy0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKy0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKy0jICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCistIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKy0jIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCistCistY2FzZSAkaG9zdF9vcyBpbgorLWFpeFs0LTldKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworIAorLWJlb3MqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CisgCistYnNkaVs0NV0qKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCistICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworLSAgOzsKKyAKKy1jeWd3aW4qKQorLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCistICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKy0gIDs7CisgCistbWluZ3cqIHwgcHczMiopCistICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CistICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKy0gICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCistICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKy0gIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wYXRoX0ZHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisrICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKysgICBlbHNlCisrICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisrICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisrICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRkdSRVAiIHx8IGNvbnRpbnVlCisrIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRkdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAorK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisrKkdOVSopCisrICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKKysqKQorKyAgYWNfY291bnQ9MAorKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisrICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisrICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisrICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCisrICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisrICAgIGZpCisrICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKysgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisrICBkb25lCisrICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKytlc2FjCisrCisrICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworKyAgICBkb25lCisrICBkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkdSRVAiOyB0aGVuCisrICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgIGZpCistICA7OworK2Vsc2UKKysgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCisrZmkKKyAKKy1kYXJ3aW4qIHwgcmhhcHNvZHkqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CisrICAgZmkKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9wYXRoX0ZHUkVQIiA+JjY7IH0KKysgRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgorIAorLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICBjYXNlICRob3N0X2NwdSBpbgorLSAgICBpKjg2ICkKKy0gICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCistICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKy0gICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCistICAgICAgOzsKKy0gICAgZXNhYworLSAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgZmkKKy0gIDs7CisgCistZ251KikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKyAKKy1ocHV4MTAuMjAqIHwgaHB1eDExKikKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKy0gIGNhc2UgJGhvc3RfY3B1IGluCistICBpYTY0KikKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCistICAgIDs7CistICBocHBhKjY0KikKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorLSAgICA7OworLSAgKikKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldLlswLTldKSBzaGFyZWQgbGlicmFyeScKKy0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorLSAgICA7OworLSAgZXNhYworLSAgOzsKKyAKKy1pbnRlcml4WzMtOV0qKQorLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCistICA7OworIAorLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCistICBjYXNlICRMRCBpbgorLSAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworLSAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CistICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CistICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CistICBlc2FjCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKyAKKy0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgqIHwgaypic2QqLWdudSkKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworIAorLW5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKy0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworLSAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCistICBmaQorLSAgOzsKKyAKKy1uZXdvczYqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCistICA7OworIAorLSpudG8qIHwgKnFueCopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKyAKKy1vcGVuYnNkKikKKy0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJworLSAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworLSAgZmkKKy0gIDs7CisgCistb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CisgCistcmRvcyopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgOzsKKyAKKy1zb2xhcmlzKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICA7OworIAorLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIDs7CisgCistc3lzdjQgfCBzeXN2NC4zKikKKy0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCistICBtb3Rvcm9sYSkKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKy0gICAgOzsKKy0gIG5jcikKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gICAgOzsKKy0gIHNlcXVlbnQpCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCistICAgIDs7CistICBzbmkpCistICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKy0gICAgOzsKKy0gIHNpZW1lbnMpCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrCisrCisrCisrCisrCisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworK2Vsc2UKKysgIHdpdGhfZ251X2xkPW5vCisrZmkKKysKKythY19wcm9nPWxkCisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KikKKysgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisrICAqKQorKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisrICBlc2FjCisrICBjYXNlICRhY19wcm9nIGluCisrICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorKyAgICBbXFwvXSogfCA/OltcXC9dKikKKysgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisrICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisrICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisrICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKysgICAgICBkb25lCisrICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisrICAgICAgOzsKKysgICIiKQorKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKysgICAgYWNfcHJvZz1sZAorICAgICA7OworLSAgcGMpCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICAqKQorKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisrICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICAgOzsKKyAgIGVzYWMKKy0gIDs7CisrZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQorK2ZpCisraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKysgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisrICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKysgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisrICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKysgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKysgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworKwk7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisrCTs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrZWxzZQorKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKytmaQorK2ZpCisgCistdHBmKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrTEQ9IiRsdF9jdl9wYXRoX0xEIgorK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQorKyRhc19lY2hvICIkTEQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorK3Rlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisrICA7OworKyopCisrICBsdF9jdl9wcm9nX2dudV9sZD1ubworICAgOzsKKyBlc2FjCistCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKy1maWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKy1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKy10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKy0KKy0KKy0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KKyt3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAKKyAKKyAKK0BAIC01ODExLDM1OSArNTg4Nyw0MTQgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCistaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3BhdGhfTk0rOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCistICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrICBsdF9jdl9wYXRoX05NPSIkTk0iCisgZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorLSAgICBicmVhayAyCistICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLWZpCistZmkKKy1BUj0kYWNfY3ZfcHJvZ19BUgorLWlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kQVIiID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKy1maQorLQorLQorLWZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCistICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisrICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisrICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKysgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisrCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisrCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKysJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisrCSAgYnJlYWsKKysJICA7OworKwkqKQorKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorKwkgICovZGV2L251bGwqKQorKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKysJICAgIGJyZWFrCisrCSAgICA7OworKwkgICopCisrCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKysJICAgIDs7CisrCSAgZXNhYworKwkgIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIElGUz0iJGx0X3NhdmVfaWZzIgorKyAgZG9uZQorKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CisgZmkKKyBmaQorLWFjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCistaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQorK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisrICBOTT0iJGx0X2N2X3BhdGhfTk0iCisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKy0gICAgQVI9ImZhbHNlIgorKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisrICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgIGVsc2UKKy0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorLXllczopCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKy1hY190b29sX3dhcm5lZD15ZXMgOzsKKy1lc2FjCistICAgIEFSPSRhY19jdF9BUgorLSAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCistZmkKKy0KKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy0KKy1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCistICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisrICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCisgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCistU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKKy1pZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjY7IH0KKytEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KKytpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFVNUEJJTiIgPiY1CisrJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKy0gIGFjX2N0X1NUUklQPSRTVFJJUAorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisraWYgdGVzdCAteiAiJERVTVBCSU4iOyB0aGVuCisrICBhY19jdF9EVU1QQklOPSREVU1QQklOCisrICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCisgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfcHJvZyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorLWRvbmUKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCistaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2OyB9CisrYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCisraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKy0gICAgU1RSSVA9IjoiCisrCisrICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKKytkb25lCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorKyAgICBEVU1QQklOPSI6IgorICAgZWxzZQorICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisgeWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLSAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKysgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorICAgZmkKKy1lbHNlCistICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCisgZmkKKyAKKy10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKy0KKy0KKysgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKysgICAgKkNPRkYqKQorKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorKyAgICAgIDs7CisrICAgICopCisrICAgICAgRFVNUEJJTj06CisrICAgICAgOzsKKysgICAgZXNhYworKyAgZmkKKyAKKysgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKysgICAgTk09IiREVU1QQklOIgorKyAgZmkKKytmaQorK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KKyAKKyAKKyAKKy1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy1lbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKyAKKy1maQorLWZpCistUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKy1maQorIAorIAorLWZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorLSAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9ubV9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CistICAgIGJyZWFrIDIKKysgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiY1KQorKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JjUpCisrICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mNSkKKysgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisrICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLWZpCistZmkKKy1hY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCistaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgcm0gLWYgY29uZnRlc3QqCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorIAorLSAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorLSAgICBSQU5MSUI9IjoiCistICBlbHNlCistICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKy15ZXM6KQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CistYWNfdG9vbF93YXJuZWQ9eWVzIDs7CistZXNhYworLSAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorLSAgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KKytMTl9TPSRhc19sbl9zCisraWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisrJGFzX2VjaG8gInllcyIgPiY2OyB9CisgZWxzZQorLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyskYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KKyBmaQorIAorLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CistCistCistCisrIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3N5c19tYXhfY21kX2xlbis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICAgaT0wCisrICB0ZXN0c3RyaW5nPSJBQkNEIgorIAorKyAgY2FzZSAkYnVpbGRfb3MgaW4KKysgIG1zZG9zZGpncHAqKQorKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisrICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKysgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKysgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisrICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKysgICAgOzsKKyAKKysgIGdudSopCisrICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKysgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworKyAgICA7OworIAorLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKy1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKysgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKysgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKysgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKysgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisrICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKysgICAgOzsKKyAKKy1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgb3BlbmJzZCopCistICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCisrICBtaW50KikKKysgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICAgOzsKKy0gICopCistICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisrCisrICBhbWlnYW9zKikKKysgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICAgOzsKKy0gIGVzYWMKKy0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorLWZpCisgCisrICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKysgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKysgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKysgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKysgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisrICAgIGVsc2UKKysgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKysgICAgZmkKKysgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKysgICAgOzsKKyAKKysgIGludGVyaXgqKQorKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorKyAgICA7OworIAorKyAgb3MyKikKKysgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorKyAgICA7OworIAorKyAgb3NmKikKKysgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisrICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisrICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisrICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKysgICAgIworKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisrICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysgICAgOzsKKysgIHNjbzMuMnY1KikKKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorKyAgICA7OworKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisrICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCisrICAgIGVsc2UKKysgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKysgICAgZmkKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCisrCXRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisrICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKysgICAgZWxzZQorKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKysgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisrICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKysgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworKyAgICAgIGRvbmUKKysgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisrICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKysgICAgICAjIHdlIGNhbid0IHRlbGwuCisrICAgICAgd2hpbGUgeyB0ZXN0ICJYImBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKysJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKysgICAgICBkbworKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisrICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKysgICAgICBkb25lCisrICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisrICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorKyAgICAgIHRlc3RzdHJpbmc9CisrICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisrICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisrICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKyAKKytmaQorIAorK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQorKyRhc19lY2hvICJub25lIiA+JjY7IH0KKytmaQorK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKyAKKyAKKyAKKyAKKyAKKyAKKys6ICR7Q1A9ImNwIC1mIn0KKys6ICR7TVY9Im12IC1mIn0KKys6ICR7Uk09InJtIC1mIn0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7IH0KKysjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworK3hzaV9zaGVsbD1ubworKyggX2x0X2R1bW15PSJhL2IvYyIKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKysgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorKyAgJiYgeHNpX3NoZWxsPXllcworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKyskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAiID4mNjsgfQorK2x0X3NoZWxsX2FwcGVuZD1ubworKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorKyAgICA+L2Rldi9udWxsIDI+JjEgXAorKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyskYXNfZWNobyAiJGx0X3NoZWxsX2FwcGVuZCIgPiY2OyB9CisgCisgCisraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBsdF91bnNldD11bnNldAorK2Vsc2UKKysgIGx0X3Vuc2V0PWZhbHNlCisrZmkKKyAKKyAKKyAKKyAKKyAKKysjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCisrY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisrICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworKyAgOzsKKysgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisrICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKysgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworKyAgOzsKKytlc2FjCisgCisgCisgCitAQCAtNjE3MywyNDggKzYzMDQsMjExIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworIAorK2ZpCisgCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKyAKKy0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorLUxUQ0M9JHtMVENDLSIkQ0MifQorIAorLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KKy1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKyAKKy0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorLWNvbXBpbGVyPSRDQworIAorIAorLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKyAKKy0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKy0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorK2ZpCisgCistIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorLXN5bWNvZGU9J1tCQ0RFR1JTVF0nCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKyAKKy0jIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KKy1zeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworIAorLSMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9sZF9yZWxvYWRfZmxhZys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisrIiIgfCAiICIqKSA7OworKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworK2VzYWMKKytyZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorLWFpeCopCistICBzeW1jb2RlPSdbQkNEVF0nCistICA7OworLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKy0gIHN5bWNvZGU9J1tBQkNER0lTVFddJworLSAgOzsKKy1ocHV4KikKKy0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCistICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworLSAgZmkKKy0gIDs7CistaXJpeCogfCBub25zdG9wdXgqKQorLSAgc3ltY29kZT0nW0JDREVHUlNUXScKKy0gIDs7Cistb3NmKikKKy0gIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworLSAgOzsKKy1zb2xhcmlzKikKKy0gIHN5bWNvZGU9J1tCRFJUXScKKy0gIDs7Cistc2NvMy4ydjUqKQorLSAgc3ltY29kZT0nW0RUXScKKy0gIDs7Cistc3lzdjQuMnV3MiopCistICBzeW1jb2RlPSdbRFRdJworLSAgOzsKKy1zeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorLSAgc3ltY29kZT0nW0FCRFRdJworLSAgOzsKKy1zeXN2NCkKKy0gIHN5bWNvZGU9J1tERk5TVFVdJworLSAgOzsKKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKysgIGRhcndpbiopCisrICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworKyAgICBlbHNlCisrICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworKyAgICBmaQorKyAgICA7OworIGVzYWMKKyAKKy0jIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KKy1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KKy0qR05VKiB8ICond2l0aCBCRkQnKikKKy0gIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKKy1lc2FjCisgCistIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKy0jIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKy0jIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKy0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorLW9wdF9jcj0KKy1jYXNlICRidWlsZF9vcyBpbgorLW1pbmd3KikKKy0gIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKy0gIDs7CistZXNhYworIAorLSMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAKKy0gICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCistICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorIAorLSAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorLSAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKy0gICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKy0gICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKy0gICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCistICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCistICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCistIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCistIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCistIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKy0iICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCistIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCistIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCistIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKy0iICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKy0iICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKy0iICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorLSAgZWxzZQorLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorLSAgZmkKKy0KKy0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorLSAgcGlwZV93b3Jrcz1ubworLQorLSAgcm0gLWYgY29uZnRlc3QqCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeworLSNlbmRpZgorLWNoYXIgbm1fdGVzdF92YXI7Cistdm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cistdm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy1pbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorLV9MVF9FT0YKKy0KKy0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKy0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCistICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCistICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0XCIiKSA+JjUKKy0gIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCistICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKy0gICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorLQltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKy0gICAgICBlbHNlCistCXJtIC1mICIkbmxpc3QiVAorLSAgICAgIGZpCistCistICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorLSAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCistCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorLQkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistX0xUX0VPRgorLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKy0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworIAorLQkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorLS8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworLSAgY29uc3QgY2hhciAqbmFtZTsKKy0gIHZvaWQgICAgICAgKmFkZHJlc3M7CistfQorLWx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9CisteworLSAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorLV9MVF9FT0YKKy0JICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKy0JICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CistICB7MCwgKHZvaWQgKikgMH0KKy19OworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisrICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLS8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworLSNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKKy1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworLSAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7CistfQorLSNlbmRpZgorK2ZpCisrZmkKKytPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKKytpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CisrJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKyAKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistX0xUX0VPRgorLQkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCistCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKy0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorLQkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKy0JICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0JICAgIHBpcGVfd29ya3M9eWVzCistCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorLQllbHNlCistCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CistCWZpCistICAgICAgZWxzZQorLQllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBmaQorLSAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorIAorLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorLSAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCistICAgIGJyZWFrCistICBlbHNlCistICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisgICBmaQorIGRvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKy0KKy1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKy0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorIGZpCistaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9ZmFpbGVkIiA+JjY7IH0KKythY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKKytpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKKy1lY2hvICIke0VDSE9fVH1vayIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisrICAgIE9CSkRVTVA9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorKyAgZmkKKytlbHNlCisrICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorK2ZpCisgCisrdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorIAorIAorIAorQEAgLTY0MjQsNzIxICs2NTE4LDc3OSBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCisrbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CisrbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisrIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisrIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKysjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisrIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisrIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisrIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKyAKKytjYXNlICRob3N0X29zIGluCisrYWl4WzQtOV0qKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisgCisrYmVvcyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgOzsKKyAKKytic2RpWzQ1XSopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisrICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisrICA7OworIAorK2N5Z3dpbiopCisrICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKysgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworKyAgOzsKKyAKKyttaW5ndyogfCBwdzMyKikKKysgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKysgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKysgICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KKysgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKysgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisrICBlbHNlCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisrICBmaQorKyAgOzsKKyAKKytjZWdjYyopCisrICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKysgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKysgIDs7CisgCisrZGFyd2luKiB8IHJoYXBzb2R5KikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworIAorK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKysgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBjYXNlICRob3N0X2NwdSBpbgorKyAgICBpKjg2ICkKKysgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisrICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKysgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZWxzZQorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgZmkKKysgIDs7CisgCisraGFpa3UqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisgCisraHB1eDEwLjIwKiB8IGhwdXgxMSopCisrICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisrICBjYXNlICRob3N0X2NwdSBpbgorKyAgaWE2NCopCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworKyAgICA7OworKyAgaHBwYSo2NCopCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XScKKysgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV1cLlswLTldKSBzaGFyZWQgbGlicmFyeScKKysgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorKyAgICA7OworKyAgZXNhYworKyAgOzsKKyAKKytpbnRlcml4WzMtOV0qKQorKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisrICA7OworIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworLWZpCisraXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgIGNhc2UgJExEIGluCisrICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisrICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKysgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKysgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKysgIGVzYWMKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworIAorLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisrIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgOzsKKyAKKy0jIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKy0jIGxpYnRvb2wgc3VwcG9ydC4KKy1jYXNlICRob3N0IGluCistaWE2NC0qLWhwdXgqKQorLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKy0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKy0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorLSAgICAgICpFTEYtMzIqKQorLQlIUFVYX0lBNjRfTU9ERT0iMzIiCistCTs7CistICAgICAgKkVMRi02NCopCistCUhQVVhfSUE2NF9NT0RFPSI2NCIKKy0JOzsKKy0gICAgZXNhYworK25ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKysgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworKyAgZWxzZQorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgICBmaQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgOzsKKy0qLSotaXJpeDYqKQorLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorLSAgZWNobyAnI2xpbmUgNjQ3MCAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CistICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCistICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCistCSozMi1iaXQqKQorLQkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCistCSAgOzsKKy0JKk4zMiopCistCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorLQkgIDs7CistCSo2NC1iaXQqKQorLQkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKy0JOzsKKy0gICAgICBlc2FjCistICAgIGVsc2UKKy0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCistCSozMi1iaXQqKQorLQkgIExEPSIke0xELWxkfSAtMzIiCistCSAgOzsKKy0JKk4zMiopCistCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCistCSAgOzsKKy0JKjY0LWJpdCopCistCSAgTEQ9IiR7TEQtbGR9IC02NCIKKy0JICA7OworLSAgICAgIGVzYWMKKy0gICAgZmkKKy0gIGZpCistICBybSAtcmYgY29uZnRlc3QqCisrCisrbmV3b3M2KikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKysgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICAgOzsKKyAKKy14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKKy1zMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKy0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKy0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorLSAgICAgICozMi1iaXQqKQorLQljYXNlICRob3N0IGluCistCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCistCSAgICA7OworLQkgIHg4Nl82NC0qbGludXgqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorLQkgICAgOzsKKy0JICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCistCSAgICA7OworLQkgIHMzOTB4LSpsaW51eCopCistCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCistCSAgICA7OworLQkgIHNwYXJjNjQtKmxpbnV4KikKKy0JICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKy0JICAgIDs7CistCWVzYWMKKy0JOzsKKy0gICAgICAqNjQtYml0KikKKy0JY2FzZSAkaG9zdCBpbgorLQkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKy0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCistCSAgICA7OworLQkgIHg4Nl82NC0qbGludXgqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCistCSAgICA7OworLQkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorLQkgICAgOzsKKy0JICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCistCSAgICA7OworLQkgIHNwYXJjKi0qbGludXgqKQorLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorLQkgICAgOzsKKy0JZXNhYworLQk7OworLSAgICBlc2FjCisrKm50byogfCAqcW54KikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworKworK29wZW5ic2QqKQorKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCisrICBlbHNlCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgICBmaQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgOzsKKyAKKy0qLSotc2NvMy4ydjUqKQorLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorLSAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCistICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2V4dD1jCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKy1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cisrb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisgCistICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworK3Jkb3MqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisgCistaW50CistbWFpbiAoKQorLXsKKytzb2xhcmlzKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworIAorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisrCisrc3lzdjQgfCBzeXN2NC4zKikKKysgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisrICBtb3Rvcm9sYSkKKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKysgICAgOzsKKysgIG5jcikKKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgICAgOzsKKysgIHNlcXVlbnQpCisrICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisrICAgIDs7CisrICBzbmkpCisrICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKysgICAgOzsKKysgIHNpZW1lbnMpCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICAgIDs7CisrICBwYykKKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrCisrdHBmKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworIGVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlsdF9jdl9jY19uZWVkc19iZWxmPW5vCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICBhY19leHQ9YworLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCistYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorLQorK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQorLSAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKy0gICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCistICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorLSAgZmkKKy0gIDs7Cistc3BhcmMqLSpzb2xhcmlzKikKKy0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKy0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CistICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCistICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKy0gICAgKjY0LWJpdCopCistICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKy0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CistICAgICAgKikKKy0JaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistCSAgTEQ9IiR7TEQtbGR9IC02NCIKKy0JZmkKKy0JOzsKKy0gICAgICBlc2FjCistICAgICAgOzsKKy0gICAgZXNhYworLSAgZmkKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIDs7CistZXNhYworIAorLW5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorLSAgY2FzZSAkaG9zdF9vcyBpbgorLSAgICByaGFwc29keSogfCBkYXJ3aW4qKQorLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCistICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCisgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorLWRvbmUKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorLURTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCistaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorLWVjaG8gIiR7RUNIT19UfSREU1lNVVRJTCIgPiY2OyB9CisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKy0gIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCisgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorIGZvciBhc19kaXIgaW4gJFBBVEgKKyBkbworICAgSUZTPSRhc19zYXZlX0lGUworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCistYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKKy1pZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy0gIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorLSAgICBEU1lNVVRJTD0iOiIKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorICAgZWxzZQorICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisgeWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLSAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorICAgZmkKKyBlbHNlCistICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorIGZpCisgCistICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX05NRURJVCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCistICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorLWRvbmUKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorLU5NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKKy1pZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTk1FRElUIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kTk1FRElUIiA+JjY7IH0KKytBUj0kYWNfY3ZfcHJvZ19BUgorK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorKyRhc19lY2hvICIkQVIiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCistICBhY19jdF9OTUVESVQ9JE5NRURJVAorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorKyAgYWNfY3RfQVI9JEFSCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKy1kb25lCisrICBkb25lCisgSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKy1hY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCistaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X05NRURJVCIgPiY2OyB9CisrYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKKytpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy0gIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKy0gICAgTk1FRElUPSI6IgorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorKyAgICBBUj0iZmFsc2UiCisgICBlbHNlCisgICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyB5ZXM6KQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKyBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCistICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisrICAgIEFSPSRhY19jdF9BUgorICAgZmkKKytmaQorKworKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9hcl9hdF9maWxlKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisgZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MSVBPK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKyBlbHNlCistICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKy1kb25lCisrICBkb25lCisgSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKy1MSVBPPSRhY19jdl9wcm9nX0xJUE8KKy1pZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExJUE8iID4mNQorLWVjaG8gIiR7RUNIT19UfSRMSVBPIiA+JjY7IH0KKytTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKy0gIGFjX2N0X0xJUE89JExJUE8KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorKyAgYWNfY3RfU1RSSVA9JFNUUklQCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorLWRvbmUKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorLWFjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworLWlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0xJUE8iID4mNjsgfQorK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCisraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorLSAgICBMSVBPPSI6IgorKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisrICAgIFNUUklQPSI6IgorICAgZWxzZQorICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisgeWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLSAgICBMSVBPPSRhY19jdF9MSVBPCisrICAgIFNUUklQPSRhY19jdF9TVFJJUAorICAgZmkKKyBlbHNlCistICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorIGZpCisgCistICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfT1RPT0w9IiRPVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorIGVsc2UKKyBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCisgICBJRlM9JGFzX3NhdmVfSUZTCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCisgZG9uZQorLWRvbmUKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKyBmaQorLU9UT09MPSRhY19jdl9wcm9nX09UT09MCistaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkT1RPT0wiID4mNQorLWVjaG8gIiR7RUNIT19UfSRPVE9PTCIgPiY2OyB9CisrUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCistICBhY19jdF9PVE9PTD0kT1RPT0wKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKysgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKy1kb25lCisrICBkb25lCisgSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKy1hY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAorLWlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfT1RPT0wiID4mNjsgfQorK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKKytpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy0gIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorLSAgICBPVE9PTD0iOiIKKysgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKysgICAgUkFOTElCPSI6IgorICAgZWxzZQorICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisgeWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLSAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKysgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgIGZpCisgZWxzZQorLSAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisgZmkKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKyt0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorIAorLWZpCistZmkKKy1PVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKKy1pZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9UT09MNjQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRPVE9PTDY0IiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistZmkKKyAKKyAKKy1maQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCistICBhY19jdF9PVE9PTDY0PSRPVE9PTDY0CistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorLWVsc2UKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorLSAgICBicmVhayAyCistICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworIAorLWZpCistZmkKKy1hY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKKy1pZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X09UT09MNjQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9PVE9PTDY0IiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistZmkKKyAKKy0gIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCistICAgIE9UT09MNjQ9IjoiCistICBlbHNlCistICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKy15ZXM6KQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CistYWNfdG9vbF93YXJuZWQ9eWVzIDs7CistZXNhYworLSAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CistICBmaQorLWVsc2UKKy0gIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCistZmkKKyAKKysjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KKytvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKKytvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKyAKKytpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgb3BlbmJzZCopCisrICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKKysgICAgOzsKKysgICopCisrICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKKysgICAgOzsKKysgIGVzYWMKKysgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisrZmkKKyAKKytjYXNlICRob3N0X29zIGluCisrICBkYXJ3aW4qKQorKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisrICAqKQorKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKKytlc2FjCisgCisgCisgCitAQCAtNzE2MywxMTMzICs3MzE1LDEzMzEgQEAgZmkKKyAKKyAKKyAKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKy0JIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCistCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorLQkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCistCSMgbGluayBmbGFncy4KKy0Jcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorLQllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworLQllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLS1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKy0JJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy0JICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorLSAgICAgICAgX2x0X3Jlc3VsdD0kPworLQlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKy0JICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworLQllbHNlCistCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0JZmkKKy0Jcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorLQlybSAtZiBjb25mdGVzdC4qCistICAgICAgZmkKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCistICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCistICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCistICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistaW50CistbWFpbiAoKQorLXsKKyAKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKy1maQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0JTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CistICAgIGNhc2UgJGhvc3Rfb3MgaW4KKy0gICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKy0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CistICAgIGRhcndpbjEuKikKKy0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CistICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorLSAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKy0gICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworLSAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKy0JMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKy0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CistCTEwLlswMTJdKikKKy0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CistCTEwLiopCistCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworLSAgICAgIGVzYWMKKy0gICAgOzsKKy0gIGVzYWMKKy0gICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKy0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworLSAgICBmaQorLSAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCistICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworLSAgICBlbHNlCistICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCistICAgIGZpCistICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCistICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKy0gICAgZWxzZQorLSAgICAgIF9sdF9kc3ltdXRpbD0KKy0gICAgZmkKKy0gICAgOzsKKy0gIGVzYWMKKyAKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRhcmcuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGZsb2F0Lmg+CisgCistaW50CistbWFpbiAoKQorLXsKKyAKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorLSAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CisgCistX0FDRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgOgorLWVsc2UKKy0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKy1maQorIAorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCistICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKysjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorK0xUQ0M9JHtMVENDLSIkQ0MifQorIAorLV9BQ0VPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICA6CistZWxzZQorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KKytMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKyAKKy1maQorKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisrY29tcGlsZXI9JENDCisgCistaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKy0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKy0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistICA6CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorLSMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKy0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCistI2Vsc2UKKy0jIGRlZmluZSBJU0xPV0VSKGMpIFwKKy0JCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKy0JCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCistIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKy0jZW5kaWYKKyAKKy0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQorLWludAorLW1haW4gKCkKKy17CistICBpbnQgaTsKKy0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKy0gICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKy0gICAgICByZXR1cm4gMjsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIDoKKysjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQorK2lmICR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CistZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistKCBleGl0ICRhY19zdGF0dXMgKQorLWFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKy1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisgCisrIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorK3N5bWNvZGU9J1tCQ0RFR1JTVF0nCisgCistZmkKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisrIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCisrc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKKy1fQUNFT0YKKysjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorK2Nhc2UgJGhvc3Rfb3MgaW4KKythaXgqKQorKyAgc3ltY29kZT0nW0JDRFRdJworKyAgOzsKKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKysgIDs7CisraHB1eCopCisrICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKyAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKKysgIGZpCisrICA7OworK2lyaXgqIHwgbm9uc3RvcHV4KikKKysgIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCisrICA7OworK29zZiopCisrICBzeW1jb2RlPSdbQkNERUdRUlNUXScKKysgIDs7Cisrc29sYXJpcyopCisrICBzeW1jb2RlPSdbQkRSVF0nCisrICA7OworK3NjbzMuMnY1KikKKysgIHN5bWNvZGU9J1tEVF0nCisrICA7OworK3N5c3Y0LjJ1dzIqKQorKyAgc3ltY29kZT0nW0RUXScKKysgIDs7Cisrc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKysgIHN5bWNvZGU9J1tBQkRUXScKKysgIDs7Cisrc3lzdjQpCisrICBzeW1jb2RlPSdbREZOU1RVXScKKysgIDs7CisrZXNhYworIAorLWZpCisrIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCisrY2FzZSBgJE5NIC1WIDI+JjFgIGluCisrKkdOVSogfCAqJ3dpdGggQkZEJyopCisrICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7CisrZXNhYworIAorLSMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCisrIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKysjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKysjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKysjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorK29wdF9jcj0KKytjYXNlICRidWlsZF9vcyBpbgorK21pbmd3KikKKysgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKysgIDs7CisrZXNhYworIAorKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAKKysgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisrICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorIAorKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKysgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKysgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisrICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisrICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisrIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisrIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisrIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisrIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKysiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisrIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisrIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisrIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKysiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKysiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKysiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorKyAgZWxzZQorKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorKyAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKysgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorKyAgcGlwZV93b3Jrcz1ubworIAorKyAgcm0gLWYgY29uZnRlc3QqCisrICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorK2NoYXIgbm1fdGVzdF92YXI7Cisrdm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cisrdm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKytpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorK19MVF9FT0YKKyAKKysgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisrICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorKyAgICBubGlzdD1jb25mdGVzdC5ubQorKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdFwiIjsgfSA+JjUKKysgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisrICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKysgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKysgICAgICBlbHNlCisrCXJtIC1mICIkbmxpc3QiVAorKyAgICAgIGZpCisgCistZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCistCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKysgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKysJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorIAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK19MVF9FT0YKKysJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisrCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKysKKysJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKysKKysvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICB2b2lkICAgICAgICphZGRyZXNzOworK30KKytsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQorK3sKKysgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKKytfTFRfRU9GCisrCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisrCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorKyAgezAsICh2b2lkICopIDB9CisrfTsKKysKKysvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKysjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECisrc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKysgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworK30KKysjZW5kaWYKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrX0xUX0VPRgorKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisrCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKysJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorKwkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKysJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKysgIChldmFsICRhY19saW5rKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKysJICAgIHBpcGVfd29ya3M9eWVzCisrCSAgZmkKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworKwllbHNlCisrCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisrCWZpCisrICAgICAgZWxzZQorKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorKyAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKysgICAgZmkKKysgIGVsc2UKKysgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKysgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorKworKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisrICAgIGJyZWFrCisrICBlbHNlCisrICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisrICBmaQorK2RvbmUKKyAKKy0JZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CisrZmkKKytpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CisrJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisgZmkKKyAKKy1kb25lCisgCisgCisgCistZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyAKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfc3lzcm9vdD1ubworIGZpCisgCistZG9uZQorIAorK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisgCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKyAKKy1hY19leHQ9Y3BwCistYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKy1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKy1pZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorLSAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKy0gICAgQ1hYPSRDQ0MKKy0gIGVsc2UKKy0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKy0gIGRvCistICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysKKysKKysKKysKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworK2ZpCisrCisrdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKysKKysjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKysjIGxpYnRvb2wgc3VwcG9ydC4KKytjYXNlICRob3N0IGluCisraWE2NC0qLWhwdXgqKQorKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisrICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysgICAgICAqRUxGLTMyKikKKysJSFBVWF9JQTY0X01PREU9IjMyIgorKwk7OworKyAgICAgICpFTEYtNjQqKQorKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisrCTs7CisrICAgIGVzYWMKKysgIGZpCisrICBybSAtcmYgY29uZnRlc3QqCisrICA7OworKyotKi1pcml4NiopCisrICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisrICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKysgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysJKjMyLWJpdCopCisrCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKysJICA7OworKwkqTjMyKikKKysJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisrCSAgOzsKKysJKjY0LWJpdCopCisrCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorKwk7OworKyAgICAgIGVzYWMKKysgICAgZWxzZQorKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysJKjMyLWJpdCopCisrCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKysJICA7OworKwkqTjMyKikKKysJICBMRD0iJHtMRC1sZH0gLW4zMiIKKysJICA7OworKwkqNjQtYml0KikKKysJICBMRD0iJHtMRC1sZH0gLTY0IgorKwkgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZmkKKysgIHJtIC1yZiBjb25mdGVzdCoKKysgIDs7CisrCisreDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKKytzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisrICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKysgICAgICAqMzItYml0KikKKysJY2FzZSAkaG9zdCBpbgorKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKysJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorKwkgICAgOzsKKysJICB4ODZfNjQtKmxpbnV4KikKKysJICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKysJICAgICAgKng4Ni02NCopCisrCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorKwkJOzsKKysJICAgICAgKikKKysJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKysJCTs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwkgIHBvd2VycGM2NGxlLSopCisrCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisrCSAgICA7OworKwkgIHBvd2VycGM2NC0qKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisrCSAgICA7OworKwkgIHMzOTB4LSpsaW51eCopCisrCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisrCSAgICA7OworKwkgIHNwYXJjNjQtKmxpbnV4KikKKysJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKysJICAgIDs7CisrCWVzYWMKKysJOzsKKysgICAgICAqNjQtYml0KikKKysJY2FzZSAkaG9zdCBpbgorKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKysJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisrCSAgICA7OworKwkgIHg4Nl82NC0qbGludXgqKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisrCSAgICA7OworKwkgIHBvd2VycGNsZS0qKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKysJICAgIDs7CisrCSAgcG93ZXJwYy0qKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorKwkgICAgOzsKKysJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisrCSAgICA7OworKwkgIHNwYXJjKi0qbGludXgqKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICBlc2FjCisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOzsKKysKKysqLSotc2NvMy4ydjUqKQorKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisrICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X2NjX25lZWRzX2JlbGYrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorKyAgYWNfZXh0PWMKKythY19jcHA9JyRDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKysKKysgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworK2Vsc2UKKysgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgICAgYWNfZXh0PWMKKythY19jcHA9JyRDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKysgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisrICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKysgIGZpCisrICA7OworKyotKnNvbGFyaXMqKQorKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisrICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKysgICAgKjY0LWJpdCopCisrICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKysgICAgICB5ZXMqKQorKyAgICAgICAgY2FzZSAkaG9zdCBpbgorKyAgICAgICAgaT84Ni0qLXNvbGFyaXMqKQorKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKysgICAgICAgICAgOzsKKysgICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQorKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisrICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKysgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICAgICAgTEQ9IiR7TEQtbGR9X3NvbDIiCisrICAgICAgICBmaQorKyAgICAgICAgOzsKKysgICAgICAqKQorKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICBMRD0iJHtMRC1sZH0gLTY0IgorKwlmaQorKwk7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKyAgICBlc2FjCisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOzsKKytlc2FjCisrCisrbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorIGRvbmUKKy1kb25lCisrICBkb25lCisgSUZTPSRhc19zYXZlX0lGUworIAorIGZpCisgZmkKKy1DWFg9JGFjX2N2X3Byb2dfQ1hYCistaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2OyB9CisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCistICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCistICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorLSAgYWNfY3RfQ1hYPSRDWFgKKy0gIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCistZG8KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKKyBkb25lCistZG9uZQorKyAgZG9uZQorIElGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorIGZpCistYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAorLWlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNjsgfQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorLQorLSAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKKy1kb25lCistCistICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCistICAgIENYWD0iZysrIgorKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKyAgIGVsc2UKKyAgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorIHllczopCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKy0gICAgQ1hYPSRhY19jdF9DWFgKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorICAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorIGZpCisgCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorIGZpCistIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKKy17IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9CisteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLXYgPiY1IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy17IChhY190cnk9IiRhY19jb21waWxlciAtViA+JjUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLWludAorLW1haW4gKCkKKy17CistI2lmbmRlZiBfX0dOVUNfXworLSAgICAgICBjaG9rZSBtZQorLSNlbmRpZgorIAorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2NvbXBpbGVyX2dudT15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JYWNfY29tcGlsZXJfZ251PW5vCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1hY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKyAKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KKy1HWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKKy1hY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorLWFjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKy0gICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCistICAgYWNfY3ZfcHJvZ19jeHhfZz1ubworLSAgIENYWEZMQUdTPSItZyIKKy0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorLWludAorLW1haW4gKCkKKy17CistCistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKKysgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCUNYWEZMQUdTPSIiCistICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy1pbnQKKy1tYWluICgpCisteworK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIDoKKytmaQorK2ZpCisrRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKKytpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKyskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworLQkgQ1hYRkxBR1M9Ii1nIgorLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorIAorLWludAorLW1haW4gKCkKKy17CisgCistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgorKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCisraWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQorLWlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorLSAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKKy1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKy0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistICAgIENYWEZMQUdTPSItZyAtTzIiCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKysgICAgRFNZTVVUSUw9IjoiCisgICBlbHNlCistICAgIENYWEZMQUdTPSItZyIKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorICAgZmkKKyBlbHNlCistICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICBDWFhGTEFHUz0iLU8yIgorLSAgZWxzZQorLSAgICBDWFhGTEFHUz0KKy0gIGZpCisrICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCisgZmkKKy1hY19leHQ9YworLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCistYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorLQorLWRlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCistICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCistICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKy0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKy0gICMgaW4gRCcuCistICBta2RpciBjb25mdGVzdC5kaXIKKy0gICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCistICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKy0gIGNkIGNvbmZ0ZXN0LmRpcgorLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCistICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorLSAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKy0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CistICAjIGRpcmVjdG9yeS4KKy0gIG1rZGlyIHN1YgorLQorLSAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKy0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCistICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorKyAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKyAgIGZpCistICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKy0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCistICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKy0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorLSAgICAjCistICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CistICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCistICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKy0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCistICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCistICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKy0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKy0gICAgZG9uZQorLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCistCistICAgIGNhc2UgJGRlcG1vZGUgaW4KKy0gICAgbm9zaWRlZWZmZWN0KQorLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKy0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKy0JY29udGludWUKKy0gICAgICBlbHNlCistCWJyZWFrCistICAgICAgZmkKKy0gICAgICA7OworLSAgICBub25lKSBicmVhayA7OworLSAgICBlc2FjCistICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KKy0gICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCistICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKy0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKy0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKy0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCistICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKy0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCistICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKy0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKy0gICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKy0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCistICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CistICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKy0gICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorLSAgICAgICAgYnJlYWsKKy0gICAgICBmaQorLSAgICBmaQorK2RvbmUKKyAgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICBjZCAuLgorLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorLWVsc2UKKy0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgZmkKKy0KKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CistQ1hYREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKy0KKy0gaWYKKy0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCistICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKy0gIGFtX19mYXN0ZGVwQ1hYX1RSVUU9CistICBhbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKKytOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCisraWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKKyskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CisgZWxzZQorLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0nIycKKy0gIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCistaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKy0gICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CistICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorLSAgYWNfZXh0PWNwcAorLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCistYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCistICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorKyAgYWNfY3RfTk1FRElUPSROTUVESVQKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCistICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKy0gICAgZG8KKy0gICAgICBhY19wcmVwcm9jX29rPWZhbHNlCistZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKy1kbworLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCistICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKy0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKy0JCSAgICAgU3ludGF4IGVycm9yCistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgOgorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKy1jb250aW51ZQorK2ZpCisrZmkKKythY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCisraWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X05NRURJVCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy0KKy0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCistICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorKyAgICBOTUVESVQ9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCistY29udGludWUKKysgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKysgIGZpCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICAjIFBhc3NlcyBib3RoIHRlc3RzLgorLWFjX3ByZXByb2Nfb2s9OgorLWJyZWFrCisrICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKKyBmaQorIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CistCisrICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisrICBhY19jdl9wcm9nX0xJUE89IiRMSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTElQTz0iJHthY190b29sX3ByZWZpeH1saXBvIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKyBkb25lCistIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgorLSAgYnJlYWsKKy1maQorLQorLSAgICBkb25lCistICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisgZmkKKy0gIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKKy1lbHNlCistICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQorLWVjaG8gIiR7RUNIT19UfSRDWFhDUFAiID4mNjsgfQorLWFjX3ByZXByb2Nfb2s9ZmFsc2UKKy1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworLWRvCistICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCistICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKy0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCistICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorLQkJICAgICBTeW50YXggZXJyb3IKKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICA6CisrTElQTz0kYWNfY3ZfcHJvZ19MSVBPCisraWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQorKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCistY29udGludWUKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgCistICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKy1jb250aW51ZQorK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKysgIGFjX2N0X0xJUE89JExJUE8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICAjIFBhc3NlcyBib3RoIHRlc3RzLgorLWFjX3ByZXByb2Nfb2s9OgorLWJyZWFrCisrZmkKKytmaQorK2FjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworK2lmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0xJUE8iID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CistCistZG9uZQorLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CistaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKy0gIDoKKysgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisrICAgIExJUE89IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBMSVBPPSRhY19jdF9MSVBPCisrICBmaQorIGVsc2UKKy0gIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworKyAgTElQTz0iJGFjX2N2X3Byb2dfTElQTyIKKyBmaQorIAorLWFjX2V4dD1jCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCistYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKy1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisrICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX09UT09MKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCisrZmkKKytmaQorK09UT09MPSRhY19jdl9wcm9nX09UT09MCisraWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRPVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgorKyAgYWNfY3RfT1RPT0w9JE9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfT1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTCIgPSB4OyB0aGVuCisrICAgIE9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgT1RPT0w9JGFjX2N0X09UT09MCisrICBmaQorK2Vsc2UKKysgIE9UT09MPSIkYWNfY3ZfcHJvZ19PVE9PTCIKKytmaQorKworKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0CisraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MNjQiID4mNQorKyRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorKyAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAorK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKysgICAgT1RPT0w2ND0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKysgIGZpCisrZWxzZQorKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKKytmaQorKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKworKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKysJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisrCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisrCSMgbGluayBmbGFncy4KKysJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKysJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKysJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorKyAgICAgICAgX2x0X3Jlc3VsdD0kPworKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorKwkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZworKyAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KKysJICBjYXQgY29uZnRlc3QuZXJyID4mNQorKwkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQorKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMDsgdGhlbgorKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisrCWVsc2UKKysJICBjYXQgY29uZnRlc3QuZXJyID4mNQorKwlmaQorKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisrCXJtIC1mIGNvbmZ0ZXN0LioKKysgICAgICBmaQorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorKworKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisrICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisrICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisrICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCisrZWxzZQorKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisrCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X2xkX2ZvcmNlX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisrICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KKytfTFRfRU9GCisrICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiY1CisrICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisrICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisrICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisraW50IG1haW4oKSB7IHJldHVybiAwO30KKytfTFRfRU9GCisrICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorKyAgICAgIF9sdF9yZXN1bHQ9JD8KKysgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgorKwljYXQgY29uZnRlc3QuZXJyID4mNQorKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKysJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKysgICAgICBlbHNlCisrCWNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAgICAgZmkKKysgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKysgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKysgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisrICAgIGRhcndpbjEuKikKKysgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisrICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKysgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKysJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKysJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisrCTEwLlswMTJdKikKKysJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisrCTEwLiopCisrCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworKyAgICAgIGVzYWMKKysgICAgOzsKKysgIGVzYWMKKysgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKysgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworKyAgICBmaQorKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworKyAgICBlbHNlCisrICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisrICAgIGZpCisrICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKysgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworKyAgICBlbHNlCisrICAgICAgX2x0X2RzeW11dGlsPQorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworKworK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorKyIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKytfQUNFT0YKKysKKytmaQorKworK2RvbmUKKysKKysKKysKKysKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorKworKworIAorIAorIAorQEAgLTgzMDQsNyArODY1NCw3IEBAIGZpCisgCisgCisgICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuCisraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKK0BAIC04MzM1LDcgKzg2ODUsNyBAQCBmaQorIAorIAorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCisraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKK0BAIC04MzY3LDggKzg3MTcsMjMgQEAgZmkKKyAKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF9waWM7IHBpY19tb2RlPSIkd2l0aHZhbCIKKytpZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorKyAgICBjYXNlICR3aXRodmFsIGluCisrICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKysgICAgKikKKysgICAgICBwaWNfbW9kZT1kZWZhdWx0CisrICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorKyAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCisrCUlGUz0iJGx0X3NhdmVfaWZzIgorKwlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgorKwkgIHBpY19tb2RlPXllcworKwlmaQorKyAgICAgIGRvbmUKKysgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKysgICAgICA7OworKyAgICBlc2FjCisgZWxzZQorICAgcGljX21vZGU9ZGVmYXVsdAorIGZpCitAQCAtODM4Myw3ICs4NzQ4LDcgQEAgdGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisgCisgCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KKy1pZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKytpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworQEAgLTg0MzksNiArODgwNCwxMSBAQCBMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC04NDY0LDEwICs4ODM0LDEwIEBAIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyBmaQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X29iamRpcitzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCisgbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK0BAIC04NDc5LDggKzg4NDksOCBAQCBlbHNlCisgZmkKKyBybWRpciAubGlicyAyPi9kZXYvbnVsbAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3Zfb2JqZGlyIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9vYmpkaXIiID4mNjsgfQorIG9iamRpcj0kbHRfY3Zfb2JqZGlyCisgCisgCitAQCAtODQ5NCwxOSArODg2NCw2IEBAIF9BQ0VPRgorIAorIAorIAorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorIGNhc2UgJGhvc3Rfb3MgaW4KKyBhaXgzKikKKyAgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorQEAgLTg1MTksMzAgKzg4NzYsMTMgQEAgYWl4MyopCisgICA7OworIGVzYWMKKyAKKy0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCistIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KKy1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworKyMgR2xvYmFsIHZhcmlhYmxlczoKKytvZmlsZT1saWJ0b29sCisrY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKy0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKy1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCistCistIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKy0jIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCistZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKy0KKy0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorLWRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCistCistIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCistbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCistCistIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKy1jYW5fYnVpbGRfc2hhcmVkPXllcworLQorLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorLSMgd2hpY2ggbmVlZHMgJy5saWInKS4KKy1saWJleHQ9YQorKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KKytsaWJleHQ9YQorIAorIHdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisgCitAQCAtODU2NCw3ICs4OTA0LDcgQEAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgICAgICopIGJyZWFrOzsKKyAgIGVzYWMKKyBkb25lCistY2NfYmFzZW5hbWU9YCRFQ0hPICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisrY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCisgCisgCisgIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0CitAQCAtODU3MiwxMCArODkxMiwxMCBAQCB0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisgZmlsZV9tYWdpYyopCisgICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgY2FzZSAkTUFHSUNfQ01EIGluCisgW1xcLypdIHwgID86W1xcL10qKQorQEAgLTg2MjUsMTEgKzg5NjUsMTEgQEAgZmkKKyAKKyBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKyBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCitAQCAtODYzOCwxMCArODk3OCwxMCBAQCBmaQorIAorIGlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgY2FzZSAkTUFHSUNfQ01EIGluCisgW1xcLypdIHwgID86W1xcL10qKQorQEAgLTg2OTEsMTEgKzkwMzEsMTEgQEAgZmkKKyAKKyBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKyBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCitAQCAtODc2NCwxNyArOTEwNCwyNiBAQCBfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorICRSTSAtciBjb25mdGVzdCoKKyAKKyAKKysjIyBDQVZFQVQgRU1QVE9SOgorKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisrIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKysjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CisgCisgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJworKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgIG52Y2MqKQorKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworKyAgKikKKysgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nIDs7CisrICBlc2FjCisgCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK0BAIC04Nzg5LDE1ICs5MTM4LDE1IEBAIGVsc2UKKyAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCistICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjg3OTI6ICRsdF9jb21waWxlXCIiID4mNSkKKysgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICAgYWNfc3RhdHVzPSQ/CisgICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gICBlY2hvICIkYXNfbWU6ODc5NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCistICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisrICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcworQEAgLTg4MDYsOCArOTE1NSw4IEBAIGVsc2UKKyAgICAkUk0gY29uZnRlc3QqCisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorQEAgLTg4MjYsOCArOTE3NSw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg4NjEsNyArOTIwOCw3IEBAIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9CisgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICAgOzsKKyAKKy0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCitAQCAtODg3NSwxMSArOTIyMiwxOCBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKKyAgICAgICA7OworIAorKyAgICBoYWlrdSopCisrICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKysgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKysgICAgICA7OworKworICAgICBocHV4KikKKy0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKy0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisrICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisrICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisrICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgICBjYXNlICRob3N0X2NwdSBpbgorLSAgICAgIGhwcGEqNjQqfGlhNjQqKQorKyAgICAgIGhwcGEqNjQqKQorIAkjICtaIHRoZSBkZWZhdWx0CisgCTs7CisgICAgICAgKikKK0BAIC04OTE2LDYgKzkyNzAsMTUgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgOzsKKyAgICAgZXNhYworKworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKysgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCisrICAgICAgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Ii1YY29tcGlsZXIgJGx0X3Byb2dfY29tcGlsZXJfcGljIgorKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgZXNhYworICAgZWxzZQorICAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC04OTI5LDcgKzkyOTIsNyBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICAgIGZpCisgICAgICAgOzsKKyAKKy0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworQEAgLTg5NTcsMTQgKzkzMjAsMzQgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICAgOzsKKyAKKy0gICAgbGludXgqIHwgaypic2QqLWdudSkKKysgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGljYyogfCBlY2MqIHwgaWZvcnQqKQorKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorKyAgICAgIGVjYyopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgICA7OworLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorKyAgICAgIGljYyogfCBpZm9ydCopCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisrICAgICAgICA7OworKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisrICAgICAgbGY5NSopCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworKwk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODk3NiwyNSArOTM1OSw0MCBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICAgICA7OworLSAgICAgIHhsKikKKy0JIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xIG9uIFBQQworKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKysJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXFzdGF0aWNsaW5rJworIAk7OworICAgICAgICopCisgCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorKwkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbMS03XS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bMC0zXSopCisrCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKysJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworKwkgIDs7CisrCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKysJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisrCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKysJICA7OworIAkqU3VuXCBDKikKKyAJICAjIFN1biBDIDUuOQorIAkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAJICA7OworLQkqU3VuXCBGKikKKy0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCistCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworKyAgICAgICAgKkludGVsKlwgW0NGXSpDb21waWxlciopCisrCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKysJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisrCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisrCSAgOzsKKysJKlBvcnRsYW5kXCBHcm91cCopCisrCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKysJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisgCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9JycKKyAJICA7OworIAllc2FjCisgCTs7CitAQCAtOTAyNiw3ICs5NDI0LDcgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTkwODMsMjIgKzk0ODEsMjYgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworIGlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitAQCAtOTExMywxNSArOTUxNSwxNSBAQCBlbHNlCisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo5MTE2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgIGFjX3N0YXR1cz0kPworICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjkxMjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorLSAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKK0BAIC05MTMwLDggKzk1MzIsOCBAQCBlbHNlCisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CisgCisgaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCisgICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCitAQCAtOTE1MCwxNCArOTU1MiwxOSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKK0BAIC05MTY5LDcgKzk1NzYsNyBAQCBlbHNlCisgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKy0gICAgICAgJEVDSE8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisrICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCitAQCAtOTE4Miw4ICs5NTg5LDggQEAgZWxzZQorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICAgOgorQEAgLTkxOTcsMTAgKzk2MDQsMTAgQEAgZmkKKyAKKyAKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCitAQCAtOTIxOCwxNiArOTYyNSwxNiBAQCBlbHNlCisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo5MjIxOiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKy0gICBlY2hvICIkYXNfbWU6OTIyNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICAgdGhlbgorICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworLSAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisrICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKK0BAIC05MjQ0LDE4ICs5NjUxLDE4IEBAIGVsc2UKKyAgICAkUk0gY29uZnRlc3QqCisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKyAKKyAKKyAKKyAKKyAKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCitAQCAtOTI3MywxNiArOTY4MCwxNiBAQCBlbHNlCisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo5Mjc2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKy0gICBlY2hvICIkYXNfbWU6OTI4MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICAgdGhlbgorICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworLSAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisrICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKK0BAIC05Mjk5LDggKzk3MDYsOCBAQCBlbHNlCisgICAgJFJNIGNvbmZ0ZXN0KgorIAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisgCisgCisgCitAQCAtOTMwOCwxOSArOTcxNSwxOSBAQCBlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorIGhhcmRfbGlua3M9Im5vdHRlc3RlZCIKKyBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CisgICBoYXJkX2xpbmtzPXllcworICAgJFJNIGNvbmZ0ZXN0KgorICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICAgbmVlZF9sb2Nrcz13YXJuCisgICBmaQorIGVsc2UKK0BAIC05MzMyLDggKzk3MzksOCBAQCBmaQorIAorIAorIAorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAKKyAgIHJ1bnBhdGhfdmFyPQorICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CitAQCAtOTM0OCw3ICs5NzU1LDYgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXIKKyAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KKyAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgICBoYXJkY29kZV9taW51c19MPW5vCisgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCitAQCAtOTM3Nyw3ICs5NzgzLDcgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXIKKyAgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorIAorICAgY2FzZSAkaG9zdF9vcyBpbgorLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCitAQCAtOTM5MiwxMCArOTc5OCwzOSBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcgorICAgb3BlbmJzZCopCisgICAgIHdpdGhfZ251X2xkPW5vCisgICAgIDs7CisrICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKKysgICAgbGlua19hbGxfZGVwbGlicz1ubworKyAgICA7OworICAgZXNhYworIAorICAgbGRfc2hsaWJzPXllcworKworKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisrICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKysgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCisgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICBhaXgqKQorKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKysJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKysJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKysJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bMi05XSopIDs7CisrCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKysJICAqKQorKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisrCSAgICA7OworKwllc2FjCisrCTs7CisrICAgICAgKikKKysJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisrCTs7CisrICAgIGVzYWMKKysgIGZpCisrCisrICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgIHdsYXJjPScke3dsfScKKyAKK0BAIC05NDEzLDYgKzk4NDgsNyBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcgorICAgICBmaQorICAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisrICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCitAQCAtOTQyOCwxMSArOTg2NCwxMiBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcgorIAlsZF9zaGxpYnM9bm8KKyAJY2F0IDw8X0xUX0VPRiAxPiYyCisgCistKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAorICoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorICoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKKy0qKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgorKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKKysqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisrKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisgCisgX0xUX0VPRgorICAgICAgIGZpCitAQCAtOTQ2NCwxNCArOTkwMSwxNiBAQCBfTFRfRU9GCisgICAgICAgZmkKKyAgICAgICA7OworIAorLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC05NDg5LDYgKzk5MjgsMTEgQEAgX0xUX0VPRgorICAgICAgIGZpCisgICAgICAgOzsKKyAKKysgICAgaGFpa3UqKQorKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKysgICAgICA7OworKworICAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05NTA0LDcgKzk5NDgsNyBAQCBfTFRfRU9GCisgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgICA7OworIAorLSAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUpCisrICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgIHRtcF9kaWV0PW5vCisgICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KK0BAIC05NTE0LDE1ICs5OTU4LDE2IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAkgIDs7CistCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKy0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorKwkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKysJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisgCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKK0BAIC05NTMwLDEzICs5OTc1LDIwIEBAIF9MVF9FT0YKKyAJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisgCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisgCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKy0JeGxbY0NdKikJCQkjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisrCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisrCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisrCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorIAkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworIAkgIHRtcF9hZGRmbGFnPSA7OworKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKysJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworKwkgIDs7CisgCWVzYWMKKyAJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CistCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworIAkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKyAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisgCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCitAQCAtOTU1MiwxNyArMTAwMDQsMTYgQEAgX0xUX0VPRgorICAgICAgICAgZmkKKyAKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JeGxmKikKKysJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorIAkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKy0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05NTc2LDggKzEwMDI3LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTk1OTUsOCArMTAwNDYsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTY0Miw4ICsxMDA5Myw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NjgzLDggKzEwMTM0LDEwIEBAIF9MVF9FT0YKKyAgICAgICBlbHNlCisgCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorIAkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisrCSMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbAorKwkjIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisgCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKy0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAJZWxzZQorIAkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworIAlmaQorQEAgLTk3NjIsNiArMTAyMTUsNyBAQCBfTFRfRU9GCisgCWZpCisgICAgICAgZmkKKyAKKysgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LWJleHBhbGwnCisgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCitAQCAtOTc3MSwxMSArMTAyMjUsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTc4Niw1MCArMTAyNDIsMzQgQEAgbWFpbiAoKQorICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisgCisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCistICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKysgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorIAlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworQEAgLTk4MzgsMTEgKzEwMjc4LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05ODUzLDU1ICsxMDI5NSw0NCBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0KKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKyAKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorIAkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAJICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJworIAkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVyb2snCistCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCistCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKysJICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgIGVsc2UKKysJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKysJICBmaQorIAkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworIAkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisgCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworQEAgLTk5MjgsMjUgKzEwMzU5LDY5IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgICA7OworIAorLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgJEVDSE8gIlgkZGVwbGlicyIgfCAkWHNlZCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4Y2x1ZGVfZXhwc3ltcz0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTk5NTYsMTEgKzEwNDMxLDIwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCisgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCistICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworKyAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KKysgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworKworKyAgZWxzZQorKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworKyAgZmkKKyAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorLSAgaWYgdGVzdCAiJEdDQyIgPSAieWVzIjsgdGhlbgorLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisrICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisrICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworKyAgZXNhYworKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorQEAgLTk5NzgsMTAgKzEwNDYyLDYgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgIDs7CisgCistICAgIGZyZWVic2QxKikKKy0gICAgICBsZF9zaGxpYnM9bm8KKy0gICAgICA7OworLQorICAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorQEAgLTk5OTQsNyArMTA0NzQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICA7OworIAorICAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCistICAgIGZyZWVic2QyKikKKysgICAgZnJlZWJzZDIuKikKKyAgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCitAQCAtMTAwMDMsNyArMTA0ODMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC0xMDAxMSw3ICsxMDQ5MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTEwMDI2LDE0ICsxMDUwNiwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICA7OworIAorICAgICBocHV4MTAqKQorLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCisgICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJworIAloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAJaGFyZGNvZGVfZGlyZWN0PXllcworIAloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCitAQCAtMTAwNDUsMTYgKzEwNTI0LDE2IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgIDs7CisgCisgICAgIGhwdXgxMSopCistICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorIAljYXNlICRob3N0X2NwdSBpbgorIAlocHBhKjY0KikKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTEwMDY2LDcgKzEwNTQ1LDQ2IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysKKysJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKysJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKysJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX19iKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubworKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrICAgTERGTEFHUz0iJExERkxBR1MgLWIiCisrICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisrICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKysgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKysgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKysgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisrICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKysgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisrICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKysgICAgICAgZmkKKysgICAgIGVsc2UKKysgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKysgICAgIGZpCisrICAgZmkKKysgICAkUk0gLXIgY29uZnRlc3QqCisrICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KKysKKytpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID0geHllczsgdGhlbgorKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworK2Vsc2UKKysgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworK2ZpCisrCisgCSAgOzsKKyAJZXNhYworICAgICAgIGZpCitAQCAtMTAwOTQsNDggKzEwNjEyLDM5IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLWludCBmb28odm9pZCkge30KKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworQEAgLTEwMTk3LDE3ICsxMDcwNiwxNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgIDs7CisgCisgICAgIG9zZjMqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCitAQCAtMTAyMTcsMTMgKzEwNzI2LDEzIEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CistCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKyAKKyAJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKK0BAIC0xMDIzNiw5ICsxMDc0NSw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMzg3LDggKzEwODk2LDggQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgZmkKKyAgIGZpCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CisrJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQorIHRlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworIAorIHdpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorQEAgLTEwNDI0LDQ2ICsxMDkzMyw1MiBAQCB4fHh5ZXMpCisgICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9CistICAgICAgJFJNIGNvbmZ0ZXN0KgorLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgJFJNIGNvbmZ0ZXN0KgorKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKy0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CistICAgICAgICBsaWI9Y29uZnRlc3QKKy0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorLSAgICAgICAgZGVwbGlicz0KKy0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCistCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKy0gICAgICAgIGxpbmtlcl9mbGFncz0tdgorLSAgICAgICAgdmVyc3RyaW5nPQorLSAgICAgICAgb3V0cHV0X29iamRpcj0uCistICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CistICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZworLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CistICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisrCSAgc29uYW1lPWNvbmZ0ZXN0CisrCSAgbGliPWNvbmZ0ZXN0CisrCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisrCSAgZGVwbGlicz0KKysJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisrCSAgbGlua2VyX2ZsYWdzPS12CisrCSAgdmVyc3RyaW5nPQorKwkgIG91dHB1dF9vYmpkaXI9LgorKwkgIGxpYm5hbWU9Y29uZnRlc3QKKysJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9CistICAgICAgICB0aGVuCistCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKy0gICAgICAgIGVsc2UKKy0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKy0gICAgICAgIGZpCistICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworLSAgICAgIGVsc2UKKy0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorLSAgICAgIGZpCistICAgICAgJFJNIGNvbmZ0ZXN0KgorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCSAgdGhlbgorKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKysJICBlbHNlCisrCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKysJICBmaQorKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisrCWVsc2UKKysJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKysJZmkKKysJJFJNIGNvbmZ0ZXN0KgorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisrICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjCisgICAgICAgOzsKKyAgICAgZXNhYworICAgZmkKK0BAIC0xMDYyMSwyOSArMTExMzYsMzEgQEAgZXNhYworIAorIAorIAorLQorLQorLQorLQorLQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKyAKKyBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgICBlc2FjCistICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorLSAgaWYgJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7JyA+L2Rldi9udWxsIDsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbQS1aYS16XTpcKSxcMSxnIiA7OworKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworKyAgZXNhYworKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKysgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKysgICpcOyopCisgICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKy0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorLSAgZWxzZQorLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCistICBmaQorKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisrICAgIDs7CisrICAqKQorKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgOzsKKysgIGVzYWMKKyAgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorQEAgLTEwNjU2LDcgKzExMTczLDcgQEAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgIGZpCisgICBkb25lCistICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJworKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworIEJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgIGx0X2Zvbz0iIjsKKyAgIGx0X2NvdW50PTA7CitAQCAtMTA2NzYsNyArMTExOTMsMTMgQEAgQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQorICAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorIH0nYAorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKKysgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisrICBjYXNlICRob3N0X29zIGluCisrICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorKyAgICAgICRTRUQgJ3MsL1woW0EtWmEtel06XCksXDEsZydgIDs7CisrICBlc2FjCisrICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCisgZWxzZQorICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorIGZpCitAQCAtMTA3MDIsNyArMTEyMjUsNyBAQCBuZWVkX3ZlcnNpb249dW5rbm93bgorIAorIGNhc2UgJGhvc3Rfb3MgaW4KKyBhaXgzKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAKK0BAIC0xMDcxMSw3ICsxMTIzNCw3IEBAIGFpeDMqKQorICAgOzsKKyAKKyBhaXhbNC05XSopCistICB2ZXJzaW9uX3R5cGU9bGludXgKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCitAQCAtMTA3NjQsNyArMTEyODcsNyBAQCBhbWlnYW9zKikKKyAgIG02OGspCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCistICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICAgOzsKKyAgIGVzYWMKKyAgIDs7CitAQCAtMTA3NzYsNyArMTEyOTksNyBAQCBiZW9zKikKKyAgIDs7CisgCisgYnNkaVs0NV0qKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKK0BAIC0xMDc4OSwxNCArMTEzMTIsMTUgQEAgYnNkaVs0NV0qKQorICAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgICA7OworIAorLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICB2ZXJzaW9uX3R5cGU9d2luZG93cworICAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDgxNywzNiArMTEzNDEsODMgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICBjeWd3aW4qKQorICAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKy0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisrCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSIKKyAgICAgICA7OworLSAgICBtaW5ndyopCisrICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKy0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCAkR1JFUCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorLSAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CistICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCistICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCistICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCistICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCistICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCistICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorLSAgICAgIGVsc2UKKy0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCistICAgICAgZmkKKyAgICAgICA7OworICAgICBwdzMyKikKKyAgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDg2Nyw3ICsxMTQzOCw3IEBAIGRhcndpbiogfCByaGFwc29keSopCisgICA7OworIAorIGRndXgqKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworQEAgLTEwODc1LDEwICsxMTQ0Niw2IEBAIGRndXgqKQorICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgIDs7CisgCistZnJlZWJzZDEqKQorLSAgZHluYW1pY19saW5rZXI9bm8KKy0gIDs7CistCisgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCitAQCAtMTA4ODYsNyArMTE0NTMsNyBAQCBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICAgZWxzZQorICAgICBjYXNlICRob3N0X29zIGluCistICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisrICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICAgZXNhYworICAgZmkKK0BAIC0xMDkwNCw3ICsxMTQ3MSw3IEBAIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIGVzYWMKKyAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICBjYXNlICRob3N0X29zIGluCistICBmcmVlYnNkMiopCisrICBmcmVlYnNkMi4qKQorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgIDs7CisgICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorQEAgLTEwOTIzLDE0ICsxMTQ5MCwxNyBAQCBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICBlc2FjCisgICA7OworIAorLWdudSopCistICB2ZXJzaW9uX3R5cGU9bGludXgKKytoYWlrdSopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICistICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisrICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorQEAgLTEwOTc1LDEyICsxMTU0NSwxNCBAQCBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgOzsKKyAgIGVzYWMKKy0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisrICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICAgOzsKKyAKKyBpbnRlcml4WzMtOV0qKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKK0BAIC0xMDk5Niw3ICsxMTU2OCw3IEBAIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAgKikKKyAJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorLQkJdmVyc2lvbl90eXBlPWxpbnV4CisrCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgCWVsc2UKKyAJCXZlcnNpb25fdHlwZT1pcml4CisgCWZpIDs7CitAQCAtMTEwMzMsOSArMTE2MDUsOSBAQCBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgZHluYW1pY19saW5rZXI9bm8KKyAgIDs7CisgCistIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4KiB8IGsqYnNkKi1nbnUpCistICB2ZXJzaW9uX3R5cGU9bGludXgKKysjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCisrbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCisgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKK0BAIC0xMTA0MywxNiArMTE2MTUsMTcgQEAgbGludXgqIHwgaypic2QqLWdudSkKKyAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrCisgICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKy0gIHNhdmVfTERGTEFHUz0kTERGTEFHUworLSAgc2F2ZV9saWJkaXI9JGxpYmRpcgorLSAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorLSAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKysgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisrCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTEwNjMsMzkgKzExNjM2LDE5IEBAIG1haW4gKCkKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbgorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworIGZpCistCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisrICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKyAKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gIExERkxBR1M9JHNhdmVfTERGTEFHUworLSAgbGliZGlyPSRzYXZlX2xpYmRpcgorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKyAKKyAgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCitAQCAtMTExMDQsNyArMTE2NTcsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorIAorICAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCistICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKysgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICAgZmkKKyAKK0BAIC0xMTE0OCw3ICsxMTcwMSw3IEBAIG5ldGJzZCopCisgICA7OworIAorIG5ld3NvczYpCistICB2ZXJzaW9uX3R5cGU9bGludXgKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK0BAIC0xMTIxNyw3ICsxMTc3MCw3IEBAIHJkb3MqKQorICAgOzsKKyAKKyBzb2xhcmlzKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworQEAgLTExMjQyLDcgKzExNzk1LDcgQEAgc3Vub3M0KikKKyAgIDs7CisgCisgc3lzdjQgfCBzeXN2NC4zKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKK0BAIC0xMTI2Niw3ICsxMTgxOSw3IEBAIHN5c3Y0IHwgc3lzdjQuMyopCisgCisgc3lzdjQqTVAqKQorICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKKysgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKK0BAIC0xMTI5NywxNyArMTE4NTAsMTcgQEAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgCisgdHBmKikKKyAgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCisgdXRzNCopCistICB2ZXJzaW9uX3R5cGU9bGludXgKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICitAQCAtMTEzMTcsOCArMTE4NzAsOCBAQCB1dHM0KikKKyAgIGR5bmFtaWNfbGlua2VyPW5vCisgICA7OworIGVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KKyB0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworIAorIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK0BAIC0xMTQxOSw4ICsxMTk3MiwxMyBAQCBmaQorIAorIAorIAorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQorKworKworKworKworKworKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CisgaGFyZGNvZGVfYWN0aW9uPQorIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fAorICAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKK0BAIC0xMTQ0NCw4ICsxMjAwMiw4IEBAIGVsc2UKKyAgICMgZGlyZWN0b3JpZXMuCisgICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uIiA+JjY7IH0KKyAKKyBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAorICAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgorQEAgLTExNDc3LDcgKzEyMDM1LDcgQEAgZWxzZQorICAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICAgOzsKKyAKKy0gIG1pbmd3KiB8IHB3MzIqKQorKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgICA7OworQEAgLTExNDg5LDE4ICsxMjA0NywxNCBAQCBlbHNlCisgCisgICBkYXJ3aW4qKQorICAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisgTElCUz0iLWxkbCAgJExJQlMiCistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCitAQCAtMTE1MTgsMzkgKzEyMDcyLDE4IEBAIHJldHVybiBkbG9wZW4gKCk7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9saWJfZGxfZGxvcGVuPW5vCisrICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorIGVsc2UKKyAKK0BAIC0xMTU2MywxMDIgKzEyMDk2LDE4IEBAIGZpCisgICAgIDs7CisgCisgICAqKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSBzaGxfbG9hZCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHNobF9sb2FkLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgc2hsX2xvYWQgaW5ub2N1b3VzX3NobF9sb2FkCistCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHNobF9sb2FkICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLQorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorLQorLSN1bmRlZiBzaGxfbG9hZAorLQorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgc2hsX2xvYWQgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfc2hsX2xvYWQgfHwgZGVmaW5lZCBfX3N0dWJfX19zaGxfbG9hZAorLWNob2tlIG1lCistI2VuZGlmCistCistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gc2hsX2xvYWQgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X2Z1bmNfc2hsX2xvYWQ9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl9mdW5jX3NobF9sb2FkID0geWVzOyB0aGVuCisrICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CisgICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKyBMSUJTPSItbGRsZCAgJExJQlMiCistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCitAQCAtMTE2NzYsMTM3ICsxMjEyNSwzMiBAQCByZXR1cm4gc2hsX2xvYWQgKCk7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCisrICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4iID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lIGRsb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGRsb3Blbi4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lIGRsb3BlbiBpbm5vY3VvdXNfZGxvcGVuCistCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsb3BlbiAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKy0KKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKy0KKy0jdW5kZWYgZGxvcGVuCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciBkbG9wZW4gKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfZGxvcGVuIHx8IGRlZmluZWQgX19zdHViX19fZGxvcGVuCistY2hva2UgbWUKKy0jZW5kaWYKKy0KKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiBkbG9wZW4gKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGFjX2N2X2Z1bmNfZGxvcGVuPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9mdW5jX2Rsb3Blbj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19kbG9wZW4iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsb3BlbiIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfZnVuY19kbG9wZW4gPSB5ZXM7IHRoZW4KKysgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geHllczsgdGhlbiA6CisgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyBlbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisgTElCUz0iLWxkbCAgJExJQlMiCistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCitAQCAtMTE4MjQsNTMgKzEyMTY4LDI4IEBAIHJldHVybiBkbG9wZW4gKCk7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9saWJfZGxfZGxvcGVuPW5vCisrICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2xpYl9zdmxkX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKyBMSUJTPSItbHN2bGQgICRMSUJTIgorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKytjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorQEAgLTExODg4LDUzICsxMjIwNywyOCBAQCByZXR1cm4gZGxvcGVuICgpOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KKysgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworIGZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfbGliX2RsZF9kbGRfbGluays6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKyBMSUJTPSItbGRsZCAgJExJQlMiCistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCitAQCAtMTE5NTIsMzkgKzEyMjQ2LDE4IEBAIHJldHVybiBkbGRfbGluayAoKTsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKysgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKyBmaQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayA9IHllczsgdGhlbgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6CisgICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCisgZmkKKyAKK0BAIC0xMjAyMywxMCArMTIyOTYsMTAgQEAgZmkKKyAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorIAorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcworQEAgLTEyMDM0LDcgKzEyMzA3LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTIwMzcgImNvbmZpZ3VyZSIKKysjbGluZSAkTElORU5PICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTEyMDc1LDExICsxMjM0OCwxMyBAQCBlbHNlCisgIyAgZW5kaWYKKyAjZW5kaWYKKyAKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKysvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisrICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMjA4OCwyMCArMTIzNjMsMjQgQEAgaW50IG1haW4gKCkKKyAgIGlmIChzZWxmKQorICAgICB7CisgICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CistICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKysgICAgICBlbHNlCisrICAgICAgICB7CisrCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworKwl9CisgICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgIH0KKyAgIGVsc2UKKyAgICAgcHV0cyAoZGxlcnJvciAoKSk7CisgCistICAgIGV4aXQgKHN0YXR1cyk7CisrICByZXR1cm4gc3RhdHVzOworIH0KKyBfTFRfRU9GCistICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKysgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgIGx0X3N0YXR1cz0kPworICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCitAQCAtMTIxMTgsMTUgKzEyMzk3LDE1IEBAIHJtIC1mciBjb25mdGVzdCoKKyAKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQorIAorICAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKy0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitAQCAtMTIxMzQsNyArMTI0MTMsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMjEzNyAiY29uZmlndXJlIgorKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTIxNzUsMTEgKzEyNDU0LDEzIEBAIGVsc2UKKyAjICBlbmRpZgorICNlbmRpZgorIAorLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOworKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKysgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisrI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyMTg4LDIwICsxMjQ2OSwyNCBAQCBpbnQgbWFpbiAoKQorICAgaWYgKHNlbGYpCisgICAgIHsKKyAgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKy0gICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisrICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisrCX0KKyAgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICAgfQorICAgZWxzZQorICAgICBwdXRzIChkbGVycm9yICgpKTsKKyAKKy0gICAgZXhpdCAoc3RhdHVzKTsKKysgIHJldHVybiBzdGF0dXM7CisgfQorIF9MVF9FT0YKKy0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgICAoZXZhbCAkYWNfbGluaykgMj4mNQorICAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICAgbHRfc3RhdHVzPSQ/CisgICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KK0BAIC0xMjIxOCw4ICsxMjUwMyw4IEBAIHJtIC1mciBjb25mdGVzdCoKKyAKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICAgZmkKKyAKKyAgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorQEAgLTEyMjU3LDEzICsxMjU0MiwxMyBAQCBmaQorIAorIHN0cmlwbGliPQorIG9sZF9zdHJpcGxpYj0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICRFQ0hPX0MiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyskYXNfZWNobyAieWVzIiA+JjY7IH0KKyBlbHNlCisgIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgICBjYXNlICRob3N0X29zIGluCitAQCAtMTIyNzEsMTYgKzEyNTU2LDE2IEBAIGVsc2UKKyAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICBlbHNlCistICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgZmkKKyAgICAgOzsKKyAgICopCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorICAgICA7OworICAgZXNhYworIGZpCitAQCAtMTIyOTcsMTMgKzEyNTgyLDEzIEBAIGZpCisgCisgCisgICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisgCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisgCisgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKK0BAIC0xMjMyMywxNSArMTI2MDgsMTUgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisgICAgIGZpCisgICAgIDs7CisgICBlc2FjCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisgCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CisrJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KKyAKKyAKKyAKK0BAIC0xMjM0NSwzOCArMTI2MzAsMTc4IEBAIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKyBDQz0iJGx0X3NhdmVfQ0MiCisgCistCistYWNfZXh0PWNwcAorKyAgICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisrICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorKyAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKysgIGFjX2V4dD1jcHAKKyBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworIGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorK2lmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCisrICBpZiAke2FjX2N2X3Byb2dfQ1hYQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorKyAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCisrICAgIGRvCisrICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCisrZG8KKysgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKysgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKysgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisrICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisrCQkgICAgIFN5bnRheCBlcnJvcgorK19BQ0VPRgorK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgCistYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCistYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorLWFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKy1hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KKy1jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPW5vCistZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KKy1oYXJkY29kZV9kaXJlY3RfQ1hYPW5vCistaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD1ubworLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQorLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYPQorLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQorLWhhcmRjb2RlX21pbnVzX0xfQ1hYPW5vCistaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKKy1oYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCistaW5oZXJpdF9ycGF0aF9DWFg9bm8KKy1tb2R1bGVfY21kc19DWFg9CistbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KKy1saW5rX2FsbF9kZXBsaWJzX0NYWD11bmtub3duCistb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKKy1ub191bmRlZmluZWRfZmxhZ19DWFg9Cistd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCistCistIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCistYWNfZXh0PWNwcAorK2Vsc2UKKysgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKytjb250aW51ZQorK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorKworKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKysgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorK19BQ0VPRgorK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisrICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisrZWxzZQorKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKythY19wcmVwcm9jX29rPToKKyticmVhaworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorKworK2RvbmUKKysjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KKytybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorKyAgYnJlYWsKKytmaQorKworKyAgICBkb25lCisrICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKysKKytmaQorKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorK2Vsc2UKKysgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKKyskYXNfZWNobyAiJENYWENQUCIgPiY2OyB9CisrYWNfcHJlcHJvY19vaz1mYWxzZQorK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCisrZG8KKysgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKysgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKysgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisrICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisrCQkgICAgIFN5bnRheCBlcnJvcgorK19BQ0VPRgorK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisrCisrZWxzZQorKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisrCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisrX0FDRU9GCisraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKysgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCisrY29udGludWUKKytlbHNlCisrICAjIFBhc3NlcyBib3RoIHRlc3RzLgorK2FjX3ByZXByb2Nfb2s9OgorK2JyZWFrCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisrCisrZG9uZQorKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKytpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisrCisrZWxzZQorKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK2FzX2ZuX2Vycm9yICQ/ICJDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisrZmkKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworK2Vsc2UKKysgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworK2ZpCisrCisrYWNfZXh0PWNwcAorK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisrCisrYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisrYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKythcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KKytjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPW5vCisrZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KKytoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD1ubworK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQorK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQorK2hhcmRjb2RlX21pbnVzX0xfQ1hYPW5vCisraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKKytoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCisraW5oZXJpdF9ycGF0aF9DWFg9bm8KKyttb2R1bGVfY21kc19DWFg9CisrbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KKytsaW5rX2FsbF9kZXBsaWJzX0NYWD11bmtub3duCisrb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKKytyZWxvYWRfZmxhZ19DWFg9JHJlbG9hZF9mbGFnCisrcmVsb2FkX2NtZHNfQ1hYPSRyZWxvYWRfY21kcworK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KKyt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CisrZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9bm8KKysKKysjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KKythY19leHQ9Y3BwCisgCisgIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCisgb2JqZXh0PW8KK0BAIC0xMjQyNiw2ICsxMjg1MSw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAKKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSRDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgbHRfc2F2ZV9MRD0kTEQKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgIEdDQz0kR1hYCitAQCAtMTI0NDMsNiArMTI4NjksNyBAQCAkUk0gLXIgY29uZnRlc3QqCisgICBmaQorICAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgIENDPSR7Q1hYLSJjKysifQorKyAgQ0ZMQUdTPSRDWFhGTEFHUworICAgY29tcGlsZXI9JENDCisgICBjb21waWxlcl9DWFg9JENDCisgICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KK0BAIC0xMjQ1Myw3ICsxMjg4MCw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAgICAgKikgYnJlYWs7OworICAgZXNhYworIGRvbmUKKy1jY19iYXNlbmFtZT1gJEVDSE8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKytjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKKyAKKyAKKyAgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KK0BAIC0xMjQ3MSw3ICsxMjg5OCw3IEBAIGNjX2Jhc2VuYW1lPWAkRUNITyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorIAorIAorICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KKy1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCisraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCisgZWxzZQorICAgd2l0aF9nbnVfbGQ9bm8KK0BAIC0xMjQ4MCw4ICsxMjkwNyw4IEBAIGZpCisgYWNfcHJvZz1sZAorIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgICBjYXNlICRob3N0IGluCisgICAqLSotbWluZ3cqKQorICAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CitAQCAtMTI1MTAsMTQgKzEyOTM3LDE0IEBAIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICA7OworICAgZXNhYworIGVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CisgZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQorIGZpCistaWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2lmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorQEAgLTEyNTQ3LDE5ICsxMjk3NCwxNyBAQCBmaQorIAorIExEPSIkbHRfY3ZfcGF0aF9MRCIKKyBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMRCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JExEIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQorKyRhc19lY2hvICIkTEQiID4mNjsgfQorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrdGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorIGNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCitAQCAtMTI1NzEsOCArMTI5OTYsOCBAQCBjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgOzsKKyBlc2FjCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KKyB3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAKKyAKK0BAIC0xMjU4NCw4ICsxMzAwOSw4IEBAIHdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworQEAgLTEyNjE3LDcgKzEzMDQyLDcgQEAgd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKyAKKyAgICAgZWxzZQorICAgICAgIEdYWD1ubworQEAgLTEyNjI2LDggKzEzMDUxLDggQEAgd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisgICAgIGZpCisgCisgICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgYWl4MyopCitAQCAtMTI3MTYsNiArMTMxNDEsNyBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcgorICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAKKysgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworIAkjIGV4cG9ydC4KK0BAIC0xMjcyNiwxMSArMTMxNTIsMTMgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXIKKyAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVyb2snCisgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICAjIGV4ZWN1dGFibGUuCistICAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgICAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0xMjc0MSw1MSArMTMxNjksMzUgQEAgbWFpbiAoKQorICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0KKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKytpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisgCisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorK2ZpCisgCisgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAorLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gJEVDSE8gIlgke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiB8ICRYc2VkOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICAgZWxzZQorICAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworQEAgLTEyNzk0LDExICsxMzIwNiwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgICAgZWxzZQorIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrCSAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTEyODA5LDU1ICsxMzIyMyw0NCBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLQorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKyAKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJworIAkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tYmVyb2snCistCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKy0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorKwkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgICAgZWxzZQorKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKysJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckY29udmVuaWVuY2UnCisrCSAgICBmaQorIAkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworIAkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCisgCSAgICAjIGxpYnJhcmllcy4KK0BAIC0xMjg4NiwyOSArMTMyODksNzYgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICBlc2FjCisgICAgICAgICA7OworIAorLSAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKy0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorLSAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCistICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKy0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKy0gICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisrCSxjbCogfCBubyxjbCopCisrCSAgIyBOYXRpdmUgTVNWQworKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScgJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisrCSAgZmlsZV9saXN0X3NwZWNfQ1hYPSdAJworKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCSAgbGliZXh0PWxpYgorKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorKwkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgICAgJFNFRCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBlbHNlCisrCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZml+CisrCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgICBsaW5rbmFtZXM9JworKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgQ1hYKT0ndHJ1ZScKKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBvbGRfcG9zdGluc3RhbGxfY21kc19DWFg9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIHBvc3RsaW5rX2NtZHNfQ1hYPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisrCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKysJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCisrCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisrCisrCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBlbHNlCisrCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZml+CisrCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgZWxzZQorKwkgICAgbGRfc2hsaWJzX0NYWD1ubworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwk7OworICAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgCisgCitAQCAtMTI5MTYsMTEgKzEzMzY2LDIwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICAgaGFyZGNvZGVfYXV0b21hdGljX0NYWD15ZXMKKyAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCistICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JycKKysgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisrICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisrCisrICBlbHNlCisrICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJworKyAgZmkKKyAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCistICBpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCistICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWVjaG8KKysgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKysgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisrICBlc2FjCisrICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisrICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICAgbW9kdWxlX2NtZHNfQ1hYPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCitAQCAtMTI5NTQsNyArMTM0MTMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgIGVzYWMKKyAgICAgICAgIDs7CisgCistICAgICAgZnJlZWJzZFsxMl0qKQorKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisgCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworQEAgLTEyOTcwLDcgKzEzNDI5LDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgICAgICAgOzsKKyAKKy0gICAgICBnbnUqKQorKyAgICAgIGhhaWt1KikKKysgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgICA7OworIAorICAgICAgIGhwdXg5KikKK0BAIC0xMjk5NywxMSArMTM0NTgsMTEgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCistICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworQEAgLTEzMDYyLDcgKzEzNTIzLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorIAkgICAgIyBkZXBlbmRlbmNpZXMuCistCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKysJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgCSAgICA7OworICAgICAgICAgICAqKQorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KK0BAIC0xMzA3MiwxMCArMTM1MzMsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgIGlhNjQqKQorLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICAqKQorLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKK0BAIC0xMzEwNSw3ICsxMzU2Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAgQ0MqKQorIAkgICAgIyBTR0kgQysrCistCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAKKyAJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworIAkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCitAQCAtMTMxMTYsOSArMTM1NzcsOSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgICAgKikKKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKK0BAIC0xMzEyOSw3ICsxMzU5MCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgaW5oZXJpdF9ycGF0aF9DWFg9eWVzCisgICAgICAgICA7OworIAorLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisrICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgIEtDQyopCisgCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCitAQCAtMTMxNDcsNyArMTM2MDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgCSAgICAjIGRlcGVuZGVuY2llcy4KKy0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisrCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgCisgCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKK0BAIC0xMzE4NCwyNiArMTM2NDUsMjYgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisgCSAgICBjYXNlIGAkQ0MgLVZgIGluCistCSAgICAqcGdDQ1wgWzEtNV0qIHwgKnBnY3BwXCBbMS01XSopCisrCSAgICAqcGdDQ1wgWzEtNV0uKiB8ICpwZ2NwcFwgWzEtNV0uKikKKyAJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworLQkgICAgKikgIyBWZXJzaW9uIDYgd2lsbCB1c2Ugd2VhayBzeW1ib2xzCisrCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworIAkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCSAgICAgIDs7CitAQCAtMTMyMTEsNyArMTM2NzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworIAkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgIDs7CisgCSAgY3h4KikKKyAJICAgICMgQ29tcGFxIEMrKworQEAgLTEzMjMwLDkgKzEzNjkxLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorIAkgICAgIyBkZXBlbmRlbmNpZXMuCistCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworIAkgICAgOzsKKy0JICB4bCopCisrCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisgCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKK0BAIC0xMzI1MiwxMyArMTM3MTMsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworIAkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworLQkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgICAgIGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9eWVzCisgCisgCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKyAJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorIAkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKy0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisrCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworIAorIAkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKyAJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCitAQCAtMTMzMjcsNyArMTM3ODgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgZmkKKy0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisrCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorIAllbHNlCisgCSAgbGRfc2hsaWJzX0NYWD1ubworIAlmaQorQEAgLTEzMzYyLDE1ICsxMzgyMywxNSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgIGNhc2UgJGhvc3QgaW4KKyAJICAgICAgb3NmMyopCisgCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAJCTs7CisgCSAgICAgICopCisgCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKyAJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CistCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisrCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisgCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisgCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworIAkJOzsKK0BAIC0xMzM4NiwxNyArMTM4NDcsMTcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorIAkgICAgIyBkZXBlbmRlbmNpZXMuCistCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKysJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgCSAgICA7OworIAkgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorIAkgICAgICAgIG9zZjMqKQorLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC0xMzQwNiw3ICsxMzg2Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorIAkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKy0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisrCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKyAKKyAJICAgIGVsc2UKKyAJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CitAQCAtMTM0NDIsNyArMTM5MDMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgICBzb2xhcmlzKikKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKysgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKyAJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKK0BAIC0xMzQ2Myw3ICsxMzkyNCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgZXNhYworIAkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgCistCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKysJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworIAorIAkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisgCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKK0BAIC0xMzQ4MywxNCArMTM5NDQsMTQgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCisgCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorIAkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLQkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKyAJICAgICAgZWxzZQorIAkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKyAJICAgICAgICAjIHBsYXRmb3JtLgorQEAgLTEzNTAxLDcgKzEzOTYyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorIAkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorLQkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKysJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworIAkgICAgICBmaQorIAorIAkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJworQEAgLTEzNTU1LDYgKzE0MDE2LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICBDQyopCisgCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorKwkgICAgICAnIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIKKysJICAgIHJlbG9hZF9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KKysJICAgICAgJyIkcmVsb2FkX2NtZHNfQ1hYIgorIAkgICAgOzsKKyAJICAqKQorIAkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworQEAgLTEzNTg4LDggKzE0MDUzLDggQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICA7OworICAgICBlc2FjCisgCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQorICAgICB0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisgCisgICAgIEdDQ19DWFg9IiRHWFgiCitAQCAtMTM2MTYsMTEgKzE0MDgxLDE5IEBAIHByaXZhdGU6CisgfTsKKyBfTFRfRU9GCisgCistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OworK2VzYWMKKysKKytpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKyAKK0BAIC0xMzYyOSw3ICsxNDEwMiw3IEBAIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworIAorICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworLSAgICBjYXNlICRwIGluCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAKKyAgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorQEAgLTEzNjM4LDEzICsxNDExMSwyMiBAQCBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAJIHByZXY9JHAKKyAJIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CisgICAgICAgIGZpCisgCisrICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisrICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorKyAgICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICBlc2FjCisrICAgICAgIGZpCisrICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorLQkgY2FzZSAkcCBpbgorLQkgLUwqIHwgLVIqKQorKwkgY2FzZSAke3ByZXZ9IGluCisrCSAtTCB8IC1SKQorIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKyAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisgCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorQEAgLTEzNjY0LDggKzE0MTQ2LDEwIEBAIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorIAkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAke3ByZXZ9JHtwfSIKKyAJIGZpCisgICAgICAgIGZpCisrICAgICAgIHByZXY9CisgICAgICAgIDs7CisgCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICAqLiRvYmpleHQpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KK0BAIC0xMzcwMSw2ICsxNDE4NSw3IEBAIGVsc2UKKyBmaQorIAorICRSTSAtZiBjb25mZXN0LiRvYmpleHQKKytDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisgCisgIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KKyBjYXNlICRob3N0X29zIGluCitAQCAtMTM3MzYsNyArMTQyMjEsNyBAQCBsaW51eCopCisgCisgc29sYXJpcyopCisgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgQ0MqKQorKyAgQ0MqIHwgc3VuQ0MqKQorICAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKK0BAIC0xMzgwMSw4ICsxNDI4Niw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAKKyAgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCitAQCAtMTM4MzYsNyArMTQzMTksNyBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICAgOzsKKy0gICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKikKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCitAQCAtMTM4NTIsNiArMTQzMzUsMTEgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICAgOzsKKysgICAgaGFpa3UqKQorKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKysgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisrICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorKyAgICAgIDs7CisgICAgIGludGVyaXhbMy05XSopCisgICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KK0BAIC0xMzg2MiwxMCArMTQzNTAsMTEgQEAgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICBmaQorICAgICAgIDs7CisgICAgIGhwdXgqKQorLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKysgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKysgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKysgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCistICAgICAgaHBwYSo2NCp8aWE2NCopCisrICAgICAgaHBwYSo2NCopCisgCTs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKK0BAIC0xMzkwMCw2ICsxNDM4OSwxMSBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworKwk7OworICAgICAgIGRndXgqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorIAkgIGVjKysqKQorQEAgLTEzOTU2LDE5ICsxNDQ1MCwyNiBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorIAkgICAgOzsKKyAJZXNhYworIAk7OworLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisrICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAJICBLQ0MqKQorIAkgICAgIyBLQUkgQysrIENvbXBpbGVyCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworIAkgICAgOzsKKy0JICBpY3BjKiB8IGVjcGMqICkKKy0JICAgICMgSW50ZWwgQysrCisrCSAgZWNwYyogKQorKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorIAkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworIAkgICAgOzsKKysJICBpY3BjKiApCisrCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisrCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKysJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKysJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKysJICAgIDs7CisgCSAgcGdDQyogfCBwZ2NwcCopCisgCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorIAkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCitAQCAtMTM5ODIsOCArMTQ0ODMsOCBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorIAkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKyAJICAgIDs7CistCSAgeGxjKiB8IHhsQyopCistCSAgICAjIElCTSBYTCA4LjAgb24gUFBDCisrCSAgeGxjKiB8IHhsQyogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKQorKwkgICAgIyBJQk0gWEwgOC4wLCA5LjAgb24gUFBDIGFuZCBCbHVlR2VuZQorIAkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctcXN0YXRpY2xpbmsnCitAQCAtMTQwNDUsNyArMTQ1NDYsNyBAQCBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKK0BAIC0xNDExMCwxOSArMTQ2MTEsMjYgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCisgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubworICAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorQEAgLTE0MTM3LDE1ICsxNDY0NSwxNSBAQCBlbHNlCisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDE0MDogJGx0X2NvbXBpbGVcIiIgPiY1KQorKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgICBhY19zdGF0dXM9JD8KKyAgICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgIGVjaG8gIiRhc19tZToxNDE0NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCistICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisrICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD15ZXMKK0BAIC0xNDE1NCw4ICsxNDY2Miw4IEBAIGVsc2UKKyAgICAkUk0gY29uZnRlc3QqCisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2OyB9CisgCisgaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID0geHllczsgdGhlbgorICAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggaW4KK0BAIC0xNDE3MSwxNCArMTQ2NzksMTYgQEAgZmkKKyAKKyAKKyAKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKKyB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKK0BAIC0xNDE5MCw3ICsxNDcwMCw3IEBAIGVsc2UKKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorLSAgICAgICAkRUNITyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKysgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCitAQCAtMTQyMDMsOCArMTQ3MTMsOCBAQCBlbHNlCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCisgICAgIDoKK0BAIC0xNDIxNSwxMCArMTQ3MjUsMTAgQEAgZmkKKyAKKyAKKyAKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorQEAgLTE0MjM2LDE2ICsxNDc0NiwxNiBAQCBlbHNlCisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDIzOTogJGx0X2NvbXBpbGVcIiIgPiY1KQorKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICAgYWNfc3RhdHVzPSQ/CisgICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjE0MjQzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCistICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKysgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKK0BAIC0xNDI2MiwxNSArMTQ3NzIsMTUgQEAgZWxzZQorICAgICRSTSBjb25mdGVzdCoKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KKyAKKyAKKyAKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KKytpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorQEAgLTE0Mjg4LDE2ICsxNDc5OCwxNiBAQCBlbHNlCisgICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDI5MTogJGx0X2NvbXBpbGVcIiIgPiY1KQorKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICAgYWNfc3RhdHVzPSQ/CisgICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CistICAgZWNobyAiJGFzX21lOjE0Mjk1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgICB0aGVuCisgICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCistICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKysgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKK0BAIC0xNDMxNCw4ICsxNDgyNCw4IEBAIGVsc2UKKyAgICAkUk0gY29uZnRlc3QqCisgCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisgCisgCisgCitAQCAtMTQzMjMsMTkgKzE0ODMzLDE5IEBAIGVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorIGhhcmRfbGlua3M9Im5vdHRlc3RlZCIKKyBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICAgaGFyZF9saW5rcz15ZXMKKyAgICRSTSBjb25mdGVzdCoKKyAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgICB0b3VjaCBjb25mdGVzdC5hCisgICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNjsgfQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQorICAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgIG5lZWRfbG9ja3M9d2FybgorICAgZmkKKyBlbHNlCitAQCAtMTQzNDQsMzcgKzE0ODU0LDQ3IEBAIGZpCisgCisgCisgCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAKKyAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbNC05XSopCisgICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisrICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisrICAgICMgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisgICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgICBlbHNlCisgICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgICBmaQorICAgICA7OworICAgcHczMiopCisgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKy0gIDs7CistICBjeWd3aW4qIHwgbWluZ3cqKQorLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworLSAgbGludXgqIHwgaypic2QqLWdudSkKKysgICAgOzsKKysgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisrICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgIGNsKikKKysgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKKyAgICAgbGlua19hbGxfZGVwbGlic19DWFg9bm8KKy0gIDs7CisrICAgIDs7CisgICAqKQorICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgOzsKKyAgIGVzYWMKKy0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0NYWCIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQorIHRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKyAKKyB3aXRoX2dudV9sZF9DWFg9JHdpdGhfZ251X2xkCitAQCAtMTQ0MDEsNDYgKzE0OTIxLDUyIEBAIHh8eHllcykKKyAgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCistICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQorK2lmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgJFJNIGNvbmZ0ZXN0KgorKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKy0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CistICAgICAgICBsaWI9Y29uZnRlc3QKKy0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorLSAgICAgICAgZGVwbGlicz0KKy0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCistICAgICAgICBjb21waWxlcl9mbGFncz0tdgorLSAgICAgICAgbGlua2VyX2ZsYWdzPS12CistICAgICAgICB2ZXJzdHJpbmc9CistICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKy0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKy0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKysJICBzb25hbWU9Y29uZnRlc3QKKysJICBsaWI9Y29uZnRlc3QKKysJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKysJICBkZXBsaWJzPQorKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKysJICBjb21waWxlcl9mbGFncz0tdgorKwkgIGxpbmtlcl9mbGFncz0tdgorKwkgIHZlcnN0cmluZz0KKysJICBvdXRwdXRfb2JqZGlyPS4KKysJICBsaWJuYW1lPWNvbmZ0ZXN0CisrCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKy0gICAgICAgIHRoZW4KKy0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKy0gICAgICAgIGVsc2UKKy0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCistICAgICAgICBmaQorLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCistICAgICAgZWxzZQorLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CistICAgICAgZmkKKy0gICAgICAkUk0gY29uZnRlc3QqCistICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjY7IH0KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwkgIHRoZW4KKysJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworKwkgIGVsc2UKKysJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKysJICBmaQorKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworKwllbHNlCisrCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisrCWZpCisrCSRSTSBjb25mdGVzdCoKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2OyB9CisrICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKKyAgICAgICA7OworICAgICBlc2FjCisgICBmaQorQEAgLTE0NTA4LDEwICsxNTAzNCw4IEBAIGVzYWMKKyAKKyAKKyAKKy0KKy0KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorIAorIGxpYnJhcnlfbmFtZXNfc3BlYz0KKyBsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworQEAgLTE0NTM1LDcgKzE1MDU5LDcgQEAgbmVlZF92ZXJzaW9uPXVua25vd24KKyAKKyBjYXNlICRob3N0X29zIGluCisgYWl4MyopCistICB2ZXJzaW9uX3R5cGU9bGludXgKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgCitAQCAtMTQ1NDQsNyArMTUwNjgsNyBAQCBhaXgzKikKKyAgIDs7CisgCisgYWl4WzQtOV0qKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworQEAgLTE0NTk3LDcgKzE1MTIxLDcgQEAgYW1pZ2FvcyopCisgICBtNjhrKQorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorLSAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKysgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgIDs7CisgICBlc2FjCisgICA7OworQEAgLTE0NjA5LDcgKzE1MTMzLDcgQEAgYmVvcyopCisgICA7OworIAorIGJzZGlbNDVdKikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbmVlZF92ZXJzaW9uPW5vCisgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCitAQCAtMTQ2MjIsMTQgKzE1MTQ2LDE1IEBAIGJzZGlbNDVdKikKKyAgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICAgOzsKKyAKKy1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTQ2NTAsNTYgKzE1MTc1LDEwMiBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIGN5Z3dpbiopCisgICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKysKKyAgICAgICA7OworLSAgICBtaW5ndyopCisrICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKy0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCAkR1JFUCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorLSAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CistICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCistICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCistICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCistICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCistICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCistICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorLSAgICAgIGVsc2UKKy0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCistICAgICAgZmkKKyAgICAgICA7OworICAgICBwdzMyKikKKyAgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworIAorLSAgKikKKy0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCistICAgIDs7CistICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCistICBzaGxpYnBhdGhfdmFyPVBBVEgKKy0gIDs7CistCistZGFyd2luKiB8IHJoYXBzb2R5KikKKy0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorLSAgdmVyc2lvbl90eXBlPWRhcndpbgorLSAgbmVlZF9saWJfcHJlZml4PW5vCistICBuZWVkX3ZlcnNpb249bm8KKy0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKy0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCistICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICistICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisrICAgIDs7CisrCisrICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrICBlc2FjCisrICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKysgIHNobGlicGF0aF92YXI9UEFUSAorKyAgOzsKKysKKytkYXJ3aW4qIHwgcmhhcHNvZHkqKQorKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisrICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKysgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKysgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworIAorICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgICA7OworIAorIGRndXgqKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworQEAgLTE0NzA3LDEwICsxNTI3OCw2IEBAIGRndXgqKQorICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgIDs7CisgCistZnJlZWJzZDEqKQorLSAgZHluYW1pY19saW5rZXI9bm8KKy0gIDs7CistCisgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCitAQCAtMTQ3MTgsNyArMTUyODUsNyBAQCBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICAgZWxzZQorICAgICBjYXNlICRob3N0X29zIGluCistICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisrICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICAgZXNhYworICAgZmkKK0BAIC0xNDczNiw3ICsxNTMwMyw3IEBAIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIGVzYWMKKyAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICBjYXNlICRob3N0X29zIGluCistICBmcmVlYnNkMiopCisrICBmcmVlYnNkMi4qKQorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgIDs7CisgICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorQEAgLTE0NzU1LDEzICsxNTMyMiwxNiBAQCBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICBlc2FjCisgICA7OworIAorLWdudSopCistICB2ZXJzaW9uX3R5cGU9bGludXgKKytoYWlrdSopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKy0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTE0ODA3LDEyICsxNTM3NywxNCBAQCBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgOzsKKyAgIGVzYWMKKy0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisrICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICAgOzsKKyAKKyBpbnRlcml4WzMtOV0qKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKK0BAIC0xNDgyOCw3ICsxNTQwMCw3IEBAIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAgKikKKyAJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorLQkJdmVyc2lvbl90eXBlPWxpbnV4CisrCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgCWVsc2UKKyAJCXZlcnNpb25fdHlwZT1pcml4CisgCWZpIDs7CitAQCAtMTQ4NjUsOSArMTU0MzcsOSBAQCBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgZHluYW1pY19saW5rZXI9bm8KKyAgIDs7CisgCistIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4KiB8IGsqYnNkKi1nbnUpCistICB2ZXJzaW9uX3R5cGU9bGludXgKKysjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCisrbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCisgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKK0BAIC0xNDg3NSwxNiArMTU0NDcsMTcgQEAgbGludXgqIHwgaypic2QqLWdudSkKKyAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrCisgICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKy0gIHNhdmVfTERGTEFHUz0kTERGTEFHUworLSAgc2F2ZV9saWJkaXI9JGxpYmRpcgorLSAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYXCI7IFwKKy0gICAgICAgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFhcIiIKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGlmICR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisrICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWFwiOyBcCisrCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgorKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTE0ODk1LDM5ICsxNTQ2OCwxOSBAQCBtYWluICgpCisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbgorLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisrICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgZmkKKy0KKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKysgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorIAorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCistICBsaWJkaXI9JHNhdmVfbGliZGlyCisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorIAorICAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKK0BAIC0xNDkzNiw3ICsxNTQ4OSw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgCisgICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKy0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgICBmaQorIAorQEAgLTE0OTgwLDcgKzE1NTMzLDcgQEAgbmV0YnNkKikKKyAgIDs7CisgCisgbmV3c29zNikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworQEAgLTE1MDQ5LDcgKzE1NjAyLDcgQEAgcmRvcyopCisgICA7OworIAorIHNvbGFyaXMqKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCitAQCAtMTUwNzQsNyArMTU2MjcsNyBAQCBzdW5vczQqKQorICAgOzsKKyAKKyBzeXN2NCB8IHN5c3Y0LjMqKQorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorQEAgLTE1MDk4LDcgKzE1NjUxLDcgQEAgc3lzdjQgfCBzeXN2NC4zKikKKyAKKyBzeXN2NCpNUCopCisgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCistICAgIHZlcnNpb25fdHlwZT1saW51eAorKyAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorQEAgLTE1MTI5LDE3ICsxNTY4MiwxNyBAQCBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAKKyB0cGYqKQorICAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorLSAgdmVyc2lvbl90eXBlPWxpbnV4CisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLSAgbGlicmFyeV9uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKKyB1dHM0KikKKy0gIHZlcnNpb25fdHlwZT1saW51eAorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKK0BAIC0xNTE0OSw4ICsxNTcwMiw4IEBAIHV0czQqKQorICAgZHluYW1pY19saW5rZXI9bm8KKyAgIDs7CisgZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQorIHRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisgCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgorQEAgLTE1MTYyLDE3MDQ4ICsxNTcxNSw0NTM2IEBAIGlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgZmkKKyBpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorLWZpCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1oYXJkY29kZV9hY3Rpb25fQ1hYPQorLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwKKy0gICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fAorLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgPSAiWHllcyIgOyB0aGVuCistCistICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCistICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgIT0gbm8gJiYKKy0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKy0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKy0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKy0gICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIENYWCkiICE9IG5vICYmCistICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiICE9IG5vOyB0aGVuCistICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCistICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9cmVsaW5rCistICBlbHNlCistICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCistICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9aW1tZWRpYXRlCistICBmaQorLWVsc2UKKy0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCistICAjIGRpcmVjdG9yaWVzLgorLSAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorLQorLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA9IHJlbGluayB8fAorLSAgIHRlc3QgIiRpbmhlcml0X3JwYXRoX0NYWCIgPSB5ZXM7IHRoZW4KKy0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKy0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCistICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKy0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKKy1maQorLQorLQorLQorLQorLQorLQorLQorLSAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCistCistICBDQz0kbHRfc2F2ZV9DQworLSAgTERDWFg9JExECistICBMRD0kbHRfc2F2ZV9MRAorLSAgR0NDPSRsdF9zYXZlX0dDQworLSAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKy0gIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKy0gIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorLSAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCistICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorLWZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKy0KKy1hY19leHQ9YworLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCistYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLQorLSAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCistCistCistCistCistIyBPbmx5IGV4cGFuZCBvbmNlOgorLQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKy1MTl9TPSRhc19sbl9zCistaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorLWVjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CistZmkKKy0KKy1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKy0gIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy1lbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy1maQorLWZpCistUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKy1maQorLQorLQorLWZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorLSAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorLSAgICBicmVhayAyCistICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLWZpCistZmkKKy1hY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCistaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCistICAgIFJBTkxJQj0iOiIKKy0gIGVsc2UKKy0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorLXllczopCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKy1hY190b29sX3dhcm5lZD15ZXMgOzsKKy1lc2FjCistICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCistICBmaQorLWVsc2UKKy0gIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorLWZpCistCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjbXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBjbXA7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9DTVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2FzZSAkQ01QIGluCistICBbXFwvXSogfCA/OltcXC9dKikKKy0gIGFjX2N2X3BhdGhfQ01QPSIkQ01QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKy0gIDs7CistICAqKQorLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wYXRoX0NNUD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorLSAgICBicmVhayAyCistICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLSAgOzsKKy1lc2FjCistZmkKKy1DTVA9JGFjX2N2X3BhdGhfQ01QCistaWYgdGVzdCAtbiAiJENNUCI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENNUCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JENNUCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistCistCistIyBTdXBwb3J0IGJ1aWxkaW5nIERMTHMgb24gV2luZG93cworLWVuYWJsZV93aW4zMl9kbGw9eWVzCistCistY2FzZSAkaG9zdCBpbgorLSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKikKKy0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCistICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorLWVsc2UKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy1maQorLWZpCistQVM9JGFjX2N2X3Byb2dfQVMKKy1pZiB0ZXN0IC1uICIkQVMiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JEFTIiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistZmkKKy0KKy0KKy1maQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgorLSAgYWNfY3RfQVM9JEFTCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X0FTPSIkYWNfY3RfQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorLWVsc2UKKy1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CistICAgIGJyZWFrIDIKKy0gIGZpCistZG9uZQorLWRvbmUKKy1JRlM9JGFzX3NhdmVfSUZTCistCistZmkKKy1maQorLWFjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCistaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUyIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKy0gICAgQVM9ImZhbHNlIgorLSAgZWxzZQorLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisteWVzOikKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKKy13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCistY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorLWFjX3Rvb2xfd2FybmVkPXllcyA7OworLWVzYWMKKy0gICAgQVM9JGFjX2N0X0FTCistICBmaQorLWVsc2UKKy0gIEFTPSIkYWNfY3ZfcHJvZ19BUyIKKy1maQorLQorLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy1maQorLWZpCistRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCistaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRETExUT09MIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kRExMVE9PTCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistCistZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorLSAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy1lbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy1maQorLWZpCistYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCistaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfRExMVE9PTCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorLSAgICBETExUT09MPSJmYWxzZSIKKy0gIGVsc2UKKy0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorLXllczopCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKy1hY190b29sX3dhcm5lZD15ZXMgOzsKKy1lc2FjCistICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKy0gIGZpCistZWxzZQorLSAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKy1maQorLQorLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorLSAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy1maQorLWZpCistT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCistaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kT0JKRFVNUCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistCistZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorLSAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCistICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy1lbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy1maQorLWZpCistYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCistaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3RfT0JKRFVNUCIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorLSAgICBPQkpEVU1QPSJmYWxzZSIKKy0gIGVsc2UKKy0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorLXllczopCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCistd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scworLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKKy1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KKy1hY190b29sX3dhcm5lZD15ZXMgOzsKKy1lc2FjCistICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKy0gIGZpCistZWxzZQorLSAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKKy1maQorLQorLSAgOzsKKy1lc2FjCistCistdGVzdCAteiAiJEFTIiAmJiBBUz1hcworLQorLQorLQorLQorLQorLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKy0KKy0KKy0KKy0KKy0KKy10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCistCistCistCistCistCistCistCistCistIworLSMgQ2hlY2tzIGZvciBsYW5ndWFnZSBxdWFsaWZpZXJzIGFuZCBzZW1hbnRpY3MKKy0jCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjaGFyIGlzIHVuc2lnbmVkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgY2hhciBpcyB1bnNpZ25lZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2NfY2hhcl91bnNpZ25lZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistaW50CistbWFpbiAoKQorLXsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGNoYXIpIC0xKSA8IDApXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKy0KKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfY19jaGFyX3Vuc2lnbmVkPW5vCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X2NfY2hhcl91bnNpZ25lZD15ZXMKKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jaGFyX3Vuc2lnbmVkIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jaGFyX3Vuc2lnbmVkIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl9jX2NoYXJfdW5zaWduZWQgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgX19DSEFSX1VOU0lHTkVEX18gMQorLV9BQ0VPRgorLQorLWZpCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy1pbnQKKy1tYWluICgpCisteworLS8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKy0jaWZuZGVmIF9fY3BsdXNwbHVzCistICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworLSAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKKy0gIGNvbnN0IGNoYXJzZXQgY3M7CistICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworLSAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworLSAgY2hhciAqKnBwYzsKKy0gIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCistICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CistICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKy0gIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKy0gICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCistICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CistICAgICBleHByZXNzaW9uICovCistICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CistICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKy0gIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCistICArK3BjcGNjOworLSAgcHBjID0gKGNoYXIqKikgcGNwY2M7CistICBwY3BjYyA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwcGM7CistICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMuICAqLworLSAgICBjaGFyICp0OworLSAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworLQorLSAgICAqdCsrID0gMDsKKy0gICAgaWYgKHMpIHJldHVybiAwOworLSAgfQorLSAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKy0gICAgaW50IHhbXSA9IHsyNSwgMTd9OworLSAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOworLSAgICArK2ZvbzsKKy0gIH0KKy0gIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLworLSAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKy0gICAgaXB0ciBwID0gMDsKKy0gICAgKytwOworLSAgfQorLSAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCistICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KKy0gICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKKy0gICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworLSAgfQorLSAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKy0gICAgY29uc3QgaW50IGZvbyA9IDEwOworLSAgICBpZiAoIWZvbykgcmV0dXJuIDA7CistICB9CistICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CistI2VuZGlmCistCistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2N2X2NfY29uc3Q9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X2NfY29uc3Q9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorLQorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBjb25zdAorLV9BQ0VPRgorLQorLWZpCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5saW5lLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY19pbmxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgYWNfY3ZfY19pbmxpbmU9bm8KKy1mb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpZm5kZWYgX19jcGx1c3BsdXMKKy10eXBlZGVmIGludCBmb29fdDsKKy1zdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9CistJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKy0jZW5kaWYKKy0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsKKy1kb25lCistCistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2lubGluZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW5saW5lIiA+JjY7IH0KKy0KKy0KKy1jYXNlICRhY19jdl9jX2lubGluZSBpbgorLSAgaW5saW5lIHwgeWVzKSA7OworLSAgKikKKy0gICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKy0gICAgICBubykgYWNfdmFsPTs7CistICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lubGluZTs7CistICAgIGVzYWMKKy0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNpZm5kZWYgX19jcGx1c3BsdXMKKy0jZGVmaW5lIGlubGluZSAkYWNfdmFsCistI2VuZGlmCistX0FDRU9GCistICAgIDs7CistZXNhYworLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDL0MrKyByZXN0cmljdCBrZXl3b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDL0MrKyByZXN0cmljdCBrZXl3b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY19yZXN0cmljdCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBhY19jdl9jX3Jlc3RyaWN0PW5vCistICAgIyBUcnkgdGhlIG9mZmljaWFsIHJlc3RyaWN0IGtleXdvcmQsIHRoZW4gZ2NjJ3MgX19yZXN0cmljdCwgYW5kCistICAgIyB0aGUgbGVzcyBjb21tb24gdmFyaWFudHMuCistICAgZm9yIGFjX2t3IGluIHJlc3RyaWN0IF9fcmVzdHJpY3QgX19yZXN0cmljdF9fIF9SZXN0cmljdDsgZG8KKy0gICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistdHlwZWRlZiBpbnQgKiBpbnRfcHRyOworLSAgICAgICAgaW50IGZvbyAoaW50X3B0ciAkYWNfa3cgaXApIHsKKy0gICAgICAgIHJldHVybiBpcFswXTsKKy0gICAgICAgfQorLWludAorLW1haW4gKCkKKy17CistaW50IHNbMV07CistICAgICAgICBpbnQgKiAkYWNfa3cgdCA9IHM7CistICAgICAgICB0WzBdID0gMDsKKy0gICAgICAgIHJldHVybiBmb28odCkKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfY19yZXN0cmljdD0kYWNfa3cKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgdGVzdCAiJGFjX2N2X2NfcmVzdHJpY3QiICE9IG5vICYmIGJyZWFrCistICAgZG9uZQorLQorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19yZXN0cmljdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfcmVzdHJpY3QiID4mNjsgfQorLSBjYXNlICRhY19jdl9jX3Jlc3RyaWN0IGluCistICAgcmVzdHJpY3QpIDs7CistICAgbm8pCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIHJlc3RyaWN0CistX0FDRU9GCistIDs7CistICAgKikgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIHJlc3RyaWN0ICRhY19jdl9jX3Jlc3RyaWN0CistX0FDRU9GCistIDs7CistIGVzYWMKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyB2b2xhdGlsZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyB2b2xhdGlsZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2Nfdm9sYXRpbGUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy1pbnQKKy1tYWluICgpCisteworLQorLXZvbGF0aWxlIGludCB4OworLWludCAqIHZvbGF0aWxlIHkgPSAoaW50ICopIDA7CistcmV0dXJuICF4ICYmICF5OworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl9jX3ZvbGF0aWxlPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9jX3ZvbGF0aWxlPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Nfdm9sYXRpbGUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX3ZvbGF0aWxlIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl9jX3ZvbGF0aWxlID0gbm87IHRoZW4KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgdm9sYXRpbGUKKy1fQUNFT0YKKy0KKy1maQorLQorLQorLSMKKy0jIENoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCistIworLQorLSMgSWYgdXNpbmcgR0NDIHNwZWNpZnkgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKKy0KKy10ZXN0X2djY19mbGFnKCkgeworLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy1pbnQgbWFpbigpIHt9CistX0FDRU9GCistICAgICRDQyAtYyBjb25mdGVzdC5jICRDRkxBR1MgJEAgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsCistICAgIHJldD0kPworLSAgICBybSAtZiBjb25mdGVzdC5vCistICAgIHJldHVybiAkcmV0CistfQorLQorLWlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiA7IHRoZW4KKy0gICAgREVTSVJFRF9DRkxBR1M9Ii1XYWxsIC1XbW9zdCAtcGlwZSAtV25vLXRyaWdyYXBocyAtV25vLXBhcmVudGhlc2VzIC1mZXhjZXB0aW9ucyAtc3RkPWdudTk5IC1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjUgLWZjb25zdGFudC1jZnN0cmluZ3MiCistCistICAgIGZvciBmbGFnIGluICRERVNJUkVEX0NGTEFHUyA7IGRvCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IGFjY2VwdHMgJHtmbGFnfSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7Q0N9IGFjY2VwdHMgJHtmbGFnfS4uLiAkRUNIT19DIiA+JjY7IH0KKy0gICAgICAgIGlmIHRlc3RfZ2NjX2ZsYWcgJGZsYWcgOyB0aGVuCistICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJGZsYWciCistICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKy0gICAgICAgIGZpCistICAgIGRvbmUKKy1maQorLQorLSMgQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBjb21waWxlciBzdXBwb3J0cyBhdG9taWMgYnVpbHQtaW5zCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGNvbXBpbGVyIGF0b21pYyBidWlsdC1pbnMiID4mNQorLWVjaG8gIiRhc19tZTogY2hlY2tpbmcgZm9yIGNvbXBpbGVyIGF0b21pYyBidWlsdC1pbnMiID4mNjt9CistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIF9fc3luY19mZXRjaF9hbmRfYWRkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBfX3N5bmNfZmV0Y2hfYW5kX2FkZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2NmX2N2X2hhdmVfc3luY19mZXRjaF9hbmRfYWRkK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0KKy0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0KKy0JCQkJLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy0KKy1pbnQKKy1tYWluICgpCisteworLQorLQkJCQkJaW50IGZvbyA9IDA7CistCQkJCQlyZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJmZvbywgMSk7CistCistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGNmX2N2X2hhdmVfc3luY19mZXRjaF9hbmRfYWRkPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQljZl9jdl9oYXZlX3N5bmNfZmV0Y2hfYW5kX2FkZD1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLQorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2ZfY3ZfaGF2ZV9zeW5jX2ZldGNoX2FuZF9hZGQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRjZl9jdl9oYXZlX3N5bmNfZmV0Y2hfYW5kX2FkZCIgPiY2OyB9CistCistaWYgdGVzdCAieCR7Y2ZfY3ZfaGF2ZV9zeW5jX2ZldGNoX2FuZF9hZGR9IiAhPSAieG5vIjsgdGhlbgorLQorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBIQVZFX19fU1lOQ19GRVRDSF9BTkRfQUREIDEKKy1fQUNFT0YKKy0KKy1lbHNlCistCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFN1cHBvcnQgZm9yIF9fc3luY19mZXRjaF9hbmRfYWRkIGlzIHJlcXVpcmVkLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogU3VwcG9ydCBmb3IgX19zeW5jX2ZldGNoX2FuZF9hZGQgaXMgcmVxdWlyZWQuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLWZpCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtjZl9jdl9oYXZlX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0KKy0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0KKy0JCQkJLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy0KKy1pbnQKKy1tYWluICgpCisteworLQorLQkJCQkJaW50IGZvbzsKKy0JCQkJCXJldHVybiBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKCZmb28sIDAsIDEpOworLQorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBjZl9jdl9oYXZlX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQljZl9jdl9oYXZlX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistCistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjZl9jdl9oYXZlX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kY2ZfY3ZfaGF2ZV9zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCIgPiY2OyB9CistCistaWYgdGVzdCAieCR7Y2ZfY3ZfaGF2ZV9zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcH0iICE9ICJ4bm8iOyB0aGVuCistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfX19TWU5DX0JPT0xfQ09NUEFSRV9BTkRfU1dBUCAxCistX0FDRU9GCistCistZWxzZQorLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBTdXBwb3J0IGZvciBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwIGlzIHJlcXVpcmVkLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogU3VwcG9ydCBmb3IgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCBpcyByZXF1aXJlZC4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistZmkKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSB0YXJnZXQgc3VwcG9ydHMgX19zeW5jX3N5bmNocm9uaXplIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBfX3N5bmNfc3luY2hyb25pemUuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHtjZl9jdl9oYXZlX3N5bmNfc3luY2hyb25pemUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLQorLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLQorLQkJCQkvKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorLQorLWludAorLW1haW4gKCkKKy17CistCistCQkJCQlfX3N5bmNfc3luY2hyb25pemUoKTsKKy0KKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgY2ZfY3ZfaGF2ZV9zeW5jX3N5bmNocm9uaXplPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQljZl9jdl9oYXZlX3N5bmNfc3luY2hyb25pemU9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0KKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNmX2N2X2hhdmVfc3luY19zeW5jaHJvbml6ZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2hhdmVfc3luY19zeW5jaHJvbml6ZSIgPiY2OyB9CistCistaWYgdGVzdCAieCR7Y2ZfY3ZfaGF2ZV9zeW5jX3N5bmNocm9uaXplfSIgIT0gInhubyI7IHRoZW4KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgSEFWRV9fX1NZTkNfU1lOQ0hST05JWkUgMQorLV9BQ0VPRgorLQorLWVsc2UKKy0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogU3VwcG9ydCBmb3IgX19zeW5jX3N5bmNocm9uaXplIGlzIHJlcXVpcmVkLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogU3VwcG9ydCBmb3IgX19zeW5jX3N5bmNocm9uaXplIGlzIHJlcXVpcmVkLiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy1maQorLQorLSMKKy0jIENoZWNrIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBidWlsZCB0aGUgcGFja2FnZSB3aXRoIGRlYnVnIGFuZCBwcm9maWxlCistIyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeQorLSMKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBsaWJyYXJ5IGJ1aWxkIG9wdGlvbnMiID4mNQorLWVjaG8gIiRhc19tZTogY2hlY2tpbmcgbGlicmFyeSBidWlsZCBvcHRpb25zIiA+JjY7fQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYSBkZWJ1ZyBsaWJyYXJ5IGluc3RhbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYSBkZWJ1ZyBsaWJyYXJ5IGluc3RhbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnOyBidWlsZF9kZWJ1Zz0ke2VuYWJsZXZhbH0KKy1lbHNlCistICBidWlsZF9kZWJ1Zz15ZXMKKy1maQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHtidWlsZF9kZWJ1Z30iID4mNQorLWVjaG8gIiR7RUNIT19UfSR7YnVpbGRfZGVidWd9IiA+JjY7IH0KKy0gaWYgdGVzdCAieCR7YnVpbGRfZGVidWd9IiA9ICJ4eWVzIjsgdGhlbgorLSAgQ0ZfQlVJTERfREVCVUdfVFJVRT0KKy0gIENGX0JVSUxEX0RFQlVHX0ZBTFNFPScjJworLWVsc2UKKy0gIENGX0JVSUxEX0RFQlVHX1RSVUU9JyMnCistICBDRl9CVUlMRF9ERUJVR19GQUxTRT0KKy1maQorLQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYSBwcm9maWxlIGxpYnJhcnkgaW5zdGFuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBhIHByb2ZpbGUgbGlicmFyeSBpbnN0YW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHJvZmlsZSB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHtlbmFibGVfcHJvZmlsZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSRlbmFibGVfcHJvZmlsZTsgYnVpbGRfcHJvZmlsZT0ke2VuYWJsZXZhbH0KKy1lbHNlCistICBidWlsZF9wcm9maWxlPXllcworLWZpCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAke2J1aWxkX3Byb2ZpbGV9IiA+JjUKKy1lY2hvICIke0VDSE9fVH0ke2J1aWxkX3Byb2ZpbGV9IiA+JjY7IH0KKy0gaWYgdGVzdCAieCR7YnVpbGRfcHJvZmlsZX0iID0gInh5ZXMiOyB0aGVuCistICBDRl9CVUlMRF9QUk9GSUxFX1RSVUU9CistICBDRl9CVUlMRF9QUk9GSUxFX0ZBTFNFPScjJworLWVsc2UKKy0gIENGX0JVSUxEX1BST0ZJTEVfVFJVRT0nIycKKy0gIENGX0JVSUxEX1BST0ZJTEVfRkFMU0U9CistZmkKKy0KKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHRlc3RzIGFuZCBleGFtcGxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHRlc3RzIGFuZCBleGFtcGxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVzdHMgd2FzIGdpdmVuLgorLWlmIHRlc3QgIiR7ZW5hYmxlX3Rlc3RzK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0czsgYnVpbGRfdGVzdHM9JHtlbmFibGV2YWx9CistZWxzZQorLSAgYnVpbGRfdGVzdHM9eWVzCistZmkKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR7YnVpbGRfdGVzdHN9IiA+JjUKKy1lY2hvICIke0VDSE9fVH0ke2J1aWxkX3Rlc3RzfSIgPiY2OyB9CistIGlmIHRlc3QgIngke2J1aWxkX3Rlc3RzfSIgPSAieHllcyI7IHRoZW4KKy0gIENGX0JVSUxEX1RFU1RTX1RSVUU9CistICBDRl9CVUlMRF9URVNUU19GQUxTRT0nIycKKy1lbHNlCistICBDRl9CVUlMRF9URVNUU19UUlVFPScjJworLSAgQ0ZfQlVJTERfVEVTVFNfRkFMU0U9CistZmkKKy0KKy0KKy0jCistIyBDaGVja3MgZm9yIGxpYnJhcmllcworLSMKKy0jIFdlIGV4cGVjdCB0aGF0IHdlJ2xsIG5lZWQgYXQgbWluaW11bToKKy0jCistIyAgICogZGwKKy0jICAgKiBpY3VpMThuCistIyAgICogbQorLSMgICAqIHB0aHJlYWQKKy0jICAgKiB1dWlkCistIworLSMgYW5kLCBtYXliZToKKy0jCistIyAgICogcnQKKy0jCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcmVxdWlyZWQgcGFja2FnZSBkZXBlbmRlbmNpZXMiID4mNQorLWVjaG8gIiRhc19tZTogY2hlY2tpbmcgcmVxdWlyZWQgcGFja2FnZSBkZXBlbmRlbmNpZXMiID4mNjt9CistCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2FzZSAkUEtHX0NPTkZJRyBpbgorLSAgW1xcL10qIHwgPzpbXFwvXSopCistICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKy0gIDs7CistICAqKQorLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy0gIDs7CistZXNhYworLWZpCistUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCistaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kUEtHX0NPTkZJRyIgPiY2OyB9CistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CistZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorLWZpCistCistCistCistIworLSMgU29ydCBvdXQgd2hlcmUgdGhlIElDVSBjb21wb25lbnRzIGFyZSBhdC4KKy0jCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSAoSUNVKSBwYWNrYWdlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNoZWNraW5nIHRoZSBJbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIFVuaWNvZGUgKElDVSkgcGFja2FnZSIgPiY2O30KKy0KKy0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImljdS1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBpY3UtY29uZmlnOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfSUNVX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXNlICRJQ1VfQ09ORklHIGluCistICBbXFwvXSogfCA/OltcXC9dKikKKy0gIGFjX2N2X3BhdGhfSUNVX0NPTkZJRz0iJElDVV9DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorLSAgOzsKKy0gICopCistICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3BhdGhfSUNVX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorLSAgICBicmVhayAyCistICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLSAgOzsKKy1lc2FjCistZmkKKy1JQ1VfQ09ORklHPSRhY19jdl9wYXRoX0lDVV9DT05GSUcKKy1pZiB0ZXN0IC1uICIkSUNVX0NPTkZJRyI7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJElDVV9DT05GSUciID4mNQorLWVjaG8gIiR7RUNIT19UfSRJQ1VfQ09ORklHIiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistZmkKKy0KKy0KKy0KKy0KKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWljdSB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHt3aXRoX2ljdStzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF9pY3U7CistCQlpZiB0ZXN0ICJ4JHt3aXRodmFsfSIgPSAieG5vIjsgdGhlbgorLQkJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIChJQ1UpIHBhY2thZ2UiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIChJQ1UpIHBhY2thZ2UiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCQllbHNlCistCQkJaWN1X2Rpcj0ke3dpdGh2YWx9CistCQlmaQorLQorLWVsc2UKKy0gIGljdV9kaXI9CistZmkKKy0KKy0KKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWljdS1pbmNsdWRlcyB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHt3aXRoX2ljdV9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF9pY3VfaW5jbHVkZXM7IGljdV9oZWFkZXJfZGlyPSR7d2l0aHZhbH0KKy1lbHNlCistICBpY3VfaGVhZGVyX2Rpcj0KKy1maQorLQorLQorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaWN1LWxpYnMgd2FzIGdpdmVuLgorLWlmIHRlc3QgIiR7d2l0aF9pY3VfbGlicytzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF9pY3VfbGliczsgaWN1X2xpYnJhcnlfZGlyPSR7d2l0aHZhbH0KKy1lbHNlCistICBpY3VfbGlicmFyeV9kaXI9CistZmkKKy0KKy0KKy0jIFdlIGFsd2F5cyBwcmVmZXIgY2hlY2tpbmcgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyAnLS13aXRoLWljdS0uLi4nCistIyBvcHRpb25zIGZpcnN0IHRvIHVzaW5nIGljdS1jb25maWcgYmVjYXVzZSB0aGUgZm9ybWVyIG1pZ2h0IGJlIHVzZWQKKy0jIGluIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQgb24gYSBzeXN0ZW0gdGhhdCBhbHNvIGNvbnRhaW5zCistIyBpY3UtY29uZmlnLiBJbiBzdWNoIGEgY2FzZSwgdGhlIHVzZXIgd2FudHMgd2hhdCBoZS9zaGUgc3BlY2lmaWVkCistIyByYXRoZXIgdGhhbiB3aGF0IGljdS1jb25maWcgaW5kaWNhdGVzLgorLQorLWlmIHRlc3QgIngke2ljdV9kaXJ9IiAhPSAieCIgLW8gIngke2ljdV9oZWFkZXJfZGlyfSIgIT0gIngiIC1vICJ4JHtpY3VfbGlicmFyeV9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JaWYgdGVzdCAieCR7aWN1X2Rpcn0iICE9ICJ4IjsgdGhlbgorLQkJaWYgdGVzdCAtZCAiJHtpY3VfZGlyfSI7IHRoZW4KKy0JCQlpZiB0ZXN0IC1kICIke2ljdV9kaXJ9L2luY2x1ZGUiOyB0aGVuCistCQkJCUlDVV9DUFBGTEFHUz0iLUkke2ljdV9kaXJ9L2luY2x1ZGUiCistCQkJZWxzZQorLQkJCQlJQ1VfQ1BQRkxBR1M9Ii1JJHtpY3VfZGlyfSIKKy0JCQlmaQorLQorLQkJCWlmIHRlc3QgLWQgIiR7aWN1X2Rpcn0vbGliIjsgdGhlbgorLQkJCQlJQ1VfTERGTEFHUz0iLUwke2ljdV9kaXJ9L2xpYiIKKy0JCQllbHNlCistCQkJCUlDVV9MREZMQUdTPSItTCR7aWN1X2Rpcn0iCistCQkJZmkKKy0JCWVsc2UKKy0JCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBObyBzdWNoIGRpcmVjdG9yeSAke2ljdV9kaXJ9IiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBObyBzdWNoIGRpcmVjdG9yeSAke2ljdV9kaXJ9IiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLQkJZmkKKy0JZmkKKy0KKy0JaWYgdGVzdCAieCR7aWN1X2hlYWRlcl9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JCWlmIHRlc3QgLWQgIiR7aWN1X2hlYWRlcl9kaXJ9IjsgdGhlbgorLQkJCUlDVV9DUFBGTEFHUz0iLUkke2ljdV9oZWFkZXJfZGlyfSIKKy0JCWVsc2UKKy0JCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBObyBzdWNoIGRpcmVjdG9yeSAke2ljdV9oZWFkZXJfZGlyfSIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogTm8gc3VjaCBkaXJlY3RvcnkgJHtpY3VfaGVhZGVyX2Rpcn0iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCQlmaQorLQlmaQorLQorLQlpZiB0ZXN0ICJ4JHtpY3VfbGlicmFyeV9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JCWlmIHRlc3QgLWQgIiR7aWN1X2xpYnJhcnlfZGlyfSI7IHRoZW4KKy0JCQlJQ1VfTERGTEFHUz0iLUwke2ljdV9saWJyYXJ5X2Rpcn0iCistCQllbHNlCistCQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogTm8gc3VjaCBkaXJlY3RvcnkgJHtpY3VfbGlicmFyeV9kaXJ9IiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBObyBzdWNoIGRpcmVjdG9yeSAke2ljdV9saWJyYXJ5X2Rpcn0iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCQlmaQorLQlmaQorLQorLQkjIE1vc3QgSUNVIGxpYnJhcmllcyBoYXZlIHZlcnNpb25lZCBzeW1ib2xzCistCSMgKGUuZy4gdWNhbF9vcGVuXzNfOCksIHNvIHRoZSBzdG9jayBBQ19DSEVDS19MSUIgd2lsbCBub3QKKy0JIyB3b3JrIGhlcmUgZ2l2ZW4gdGhlIHdheSBpdCBjaGVja3MgZm9yIHN5bWJvbAorLQkjIGF2YWlsYWJpbGl0eS4gUHVudCBhbmQgYXNzdW1lIHRoZSBsaWJyYXJ5IHNldCBub3JtYWxseQorLQkjIHJlcG9ydGVkIGJ5IGljdS1jb25maWcuCistCistCUlDVV9MSUJTPSIke0lDVV9MREZMQUdTfSAtbGljdWkxOG4gLWxpY3V1YyAtbGljdWRhdGEiCistCistZWxpZiB0ZXN0ICJ4JHtJQ1VfQ09ORklHfSIgIT0gIngiOyB0aGVuCistCUlDVV9DUFBGTEFHUz0iYCR7SUNVX0NPTkZJR30gLS1jcHBmbGFnc2AiCistCUlDVV9MREZMQUdTPSJgJHtJQ1VfQ09ORklHfSAtLWxkZmxhZ3NgIgorLQlJQ1VfTElCUz0iYCR7SUNVX0NPTkZJR30gLS1sZGZsYWdzLWxpYnNvbmx5YCIKKy0KKy1lbGlmIHRlc3QgIngke1BLR19DT05GSUd9IiAhPSAieCIgLWEgIiR7UEtHX0NPTkZJR30gLS1leGlzdHMgaWN1IjsgdGhlbgorLQlJQ1VfQ1BQRkxBR1M9ImAke1BLR19DT05GSUd9IC0tY2ZsYWdzIGljdWAiCistCUlDVV9MREZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWxpYnMtb25seS1MIGljdWAiCistCUlDVV9MSUJTPSJgJHtQS0dfQ09ORklHfSAtLWxpYnMtb25seS1sIGljdWAiCistCistZWxzZQorLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDYW5ub3QgZmluZCB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIChJQ1UpIHBhY2thZ2UuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZmluZCB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIChJQ1UpIHBhY2thZ2UuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLWZpCistCistCistCistCistCistQ1BQRkxBR1M9IiR7SUNVX0NQUEZMQUdTfSAke0NQUEZMQUdTfSIKKy1MREZMQUdTPSIke0lDVV9MREZMQUdTfSAke0xERkxBR1N9IgorLUxJQlM9IiR7SUNVX0xJQlN9ICR7TElCU30iCistCistCistZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3B1dGlsLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHVuaWNvZGUvdWNhbC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vjb2wuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91Y3Vyci5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3VjdXJyLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHVuaWNvZGUvdWRhdC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vsb2NkYXRhLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHVuaWNvZGUvdWxvYy5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vsb2MuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91bXNnLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHVuaWNvZGUvdW51bS5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3VzZXQuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLSMKKy0jIFNvcnQgb3V0IHdoZXJlIHRoZSBVVUlEIGNvbXBvbmVudHMgYXJlIGF0LgorLSMKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgcGFja2FnZSIgPiY1CistZWNobyAiJGFzX21lOiBjaGVja2luZyBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgcGFja2FnZSIgPiY2O30KKy0KKy0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInV1aWQtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgdXVpZC1jb25maWc7IGFjX3dvcmQ9JDIKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9VVUlEX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXNlICRVVUlEX0NPTkZJRyBpbgorLSAgW1xcL10qIHwgPzpbXFwvXSopCistICBhY19jdl9wYXRoX1VVSURfQ09ORklHPSIkVVVJRF9DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorLSAgOzsKKy0gICopCistICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCistZm9yIGFzX2RpciBpbiAkUEFUSAorLWRvCistICBJRlM9JGFzX3NhdmVfSUZTCistICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3BhdGhfVVVJRF9DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCistICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKy0gICAgYnJlYWsgMgorLSAgZmkKKy1kb25lCistZG9uZQorLUlGUz0kYXNfc2F2ZV9JRlMKKy0KKy0gIDs7CistZXNhYworLWZpCistVVVJRF9DT05GSUc9JGFjX2N2X3BhdGhfVVVJRF9DT05GSUcKKy1pZiB0ZXN0IC1uICIkVVVJRF9DT05GSUciOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVVUlEX0NPTkZJRyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFVVSURfQ09ORklHIiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistZmkKKy0KKy0KKy0KKy0KKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXV1aWQgd2FzIGdpdmVuLgorLWlmIHRlc3QgIiR7d2l0aF91dWlkK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSR3aXRoX3V1aWQ7CistCQlpZiB0ZXN0ICJ4JHt3aXRodmFsfSIgPSAieG5vIjsgdGhlbgorLQkJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyB0aGUgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIHBhY2thZ2UiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyB0aGUgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIHBhY2thZ2UiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCQlmaQorLQkJdXVpZF9kaXI9JHt3aXRodmFsfQorLQorLWVsc2UKKy0gIHV1aWRfZGlyPQorLWZpCistCistCistIyBDaGVjayB3aGV0aGVyIC0td2l0aC11dWlkLWluY2x1ZGVzIHdhcyBnaXZlbi4KKy1pZiB0ZXN0ICIke3dpdGhfdXVpZF9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF91dWlkX2luY2x1ZGVzOyB1dWlkX2hlYWRlcl9kaXI9JHt3aXRodmFsfQorLWVsc2UKKy0gIHV1aWRfaGVhZGVyX2Rpcj0KKy1maQorLQorLQorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdXVpZC1saWJzIHdhcyBnaXZlbi4KKy1pZiB0ZXN0ICIke3dpdGhfdXVpZF9saWJzK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSR3aXRoX3V1aWRfbGliczsgdXVpZF9saWJyYXJ5X2Rpcj0ke3dpdGh2YWx9CistZWxzZQorLSAgdXVpZF9saWJyYXJ5X2Rpcj0KKy1maQorLQorLQorLSMgV2UgYWx3YXlzIHByZWZlciBjaGVja2luZyB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpb3VzICctLXdpdGgtdXVpZC0uLi4nCistIyBvcHRpb25zIGZpcnN0IHRvIHVzaW5nIHV1aWQtY29uZmlnIGJlY2F1c2UgdGhlIGZvcm1lciBtaWdodCBiZSB1c2VkCistIyBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50IG9uIGEgc3lzdGVtIHRoYXQgYWxzbyBjb250YWlucworLSMgdXVpZC1jb25maWcuIEluIHN1Y2ggYSBjYXNlLCB0aGUgdXNlciB3YW50cyB3aGF0IGhlL3NoZSBzcGVjaWZpZWQKKy0jIHJhdGhlciB0aGFuIHdoYXQgdXVpZC1jb25maWcgaW5kaWNhdGVzLgorLQorLWlmIHRlc3QgIngke3V1aWRfZGlyfSIgIT0gIngiIC1vICJ4JHt1dWlkX2hlYWRlcl9kaXJ9IiAhPSAieCIgLW8gIngke3V1aWRfbGlicmFyeV9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JaWYgdGVzdCAieCR7dXVpZF9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JCWlmIHRlc3QgLWQgIiR7dXVpZF9kaXJ9IjsgdGhlbgorLQkJCWlmIHRlc3QgLWQgIiR7dXVpZF9kaXJ9L2luY2x1ZGUiOyB0aGVuCistCQkJCVVVSURfQ1BQRkxBR1M9Ii1JJHt1dWlkX2Rpcn0vaW5jbHVkZSIKKy0JCQllbHNlCistCQkJCVVVSURfQ1BQRkxBR1M9Ii1JJHt1dWlkX2Rpcn0iCistCQkJZmkKKy0KKy0JCQlpZiB0ZXN0IC1kICIke3V1aWRfZGlyfS9saWIiOyB0aGVuCistCQkJCVVVSURfTERGTEFHUz0iLUwke3V1aWRfZGlyfS9saWIiCistCQkJZWxzZQorLQkJCQlVVUlEX0xERkxBR1M9Ii1MJHt1dWlkX2Rpcn0iCistCQkJZmkKKy0JCWVsc2UKKy0JCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBObyBzdWNoIGRpcmVjdG9yeSAke3V1aWRfZGlyfSIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2Rpcn0iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistCQlmaQorLQlmaQorLQorLQlpZiB0ZXN0ICJ4JHt1dWlkX2hlYWRlcl9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JCWlmIHRlc3QgLWQgIiR7dXVpZF9oZWFkZXJfZGlyfSI7IHRoZW4KKy0JCQlVVUlEX0NQUEZMQUdTPSItSSR7dXVpZF9oZWFkZXJfZGlyfSIKKy0JCWVsc2UKKy0JCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBObyBzdWNoIGRpcmVjdG9yeSAke3V1aWRfaGVhZGVyX2Rpcn0iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IE5vIHN1Y2ggZGlyZWN0b3J5ICR7dXVpZF9oZWFkZXJfZGlyfSIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0JCWZpCistCWZpCistCistCWlmIHRlc3QgIngke3V1aWRfbGlicmFyeV9kaXJ9IiAhPSAieCI7IHRoZW4KKy0JCWlmIHRlc3QgLWQgIiR7dXVpZF9saWJyYXJ5X2Rpcn0iOyB0aGVuCistCQkJVVVJRF9MREZMQUdTPSItTCR7dXVpZF9saWJyYXJ5X2Rpcn0iCistCQllbHNlCistCQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2xpYnJhcnlfZGlyfSIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2xpYnJhcnlfZGlyfSIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0JCWZpCistCWZpCistCistCVVVSURfc2F2ZWRfbGlicz0iJHtMSUJTfSIKKy0JVVVJRF9zYXZlZF9sZGZsYWdzPSIke0xERkxBR1N9IgorLQlMREZMQUdTPSIke1VVSURfTERGTEFHU30gJHtMREZMQUdTfSIKKy0JTElCUz0iIgorLQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1dWlkX2NvbXBhcmUgaW4gLWx1dWlkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1dWlkX2NvbXBhcmUgaW4gLWx1dWlkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3V1aWRfdXVpZF9jb21wYXJlK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKy1MSUJTPSItbHV1aWQgICRMSUJTIgorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciB1dWlkX2NvbXBhcmUgKCk7CistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gdXVpZF9jb21wYXJlICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBhY19jdl9saWJfdXVpZF91dWlkX2NvbXBhcmU9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X2xpYl91dWlkX3V1aWRfY29tcGFyZT1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl91dWlkX3V1aWRfY29tcGFyZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl91dWlkX3V1aWRfY29tcGFyZSIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfbGliX3V1aWRfdXVpZF9jb21wYXJlID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBIQVZFX0xJQlVVSUQgMQorLV9BQ0VPRgorLQorLSAgTElCUz0iLWx1dWlkICRMSUJTIgorLQorLWZpCistCistCistCVVVSURfTElCUz0iJHtVVUlEX0xERkxBR1N9ICR7TElCU30iCistCUxERkxBR1M9IiR7VVVJRF9zYXZlZF9sZGZsYWdzfSIKKy0JTElCUz0iJHtVVUlEX3NhdmVkX2xpYnN9IgorLQl1bnNldCBVVUlEX3NhdmVkX2xpYnMKKy0JdW5zZXQgVVVJRF9zYXZlZF9sZGZsYWdzCistCistZWxpZiB0ZXN0ICJ4JHtVVUlEX0NPTkZJR30iICE9ICJ4IjsgdGhlbgorLQlVVUlEX0NQUEZMQUdTPSJgJHtVVUlEX0NPTkZJR30gLS1jZmxhZ3NgIgorLQlVVUlEX0xERkxBR1M9ImAke1VVSURfQ09ORklHfSAtLWxkZmxhZ3NgIgorLQlVVUlEX0xJQlM9ImAke1VVSURfQ09ORklHfSAtLWxpYnNgIgorLQorLWVsaWYgdGVzdCAieCR7UEtHX0NPTkZJR30iICE9ICJ4IiAtYSAiJHtQS0dfQ09ORklHfSAtLWV4aXN0cyB1dWlkIjsgdGhlbgorLQlVVUlEX0NQUEZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWNmbGFncyB1dWlkYCIKKy0JVVVJRF9MREZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWxpYnMtb25seS1MIHV1aWRgIgorLQlVVUlEX0xJQlM9ImAke1BLR19DT05GSUd9IC0tbGlicy1vbmx5LWwgdXVpZGAiCistCistZWxzZQorLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDYW5ub3QgZmluZCB0aGUgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIHBhY2thZ2UuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZmluZCB0aGUgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIHBhY2thZ2UuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLWZpCistCistCistCistCistCistQ1BQRkxBR1M9IiR7VVVJRF9DUFBGTEFHU30gJHtDUFBGTEFHU30iCistTERGTEFHUz0iJHtVVUlEX0xERkxBR1N9ICR7TERGTEFHU30iCistTElCUz0iJHtVVUlEX0xJQlN9ICR7TElCU30iCistCistCistZm9yIGFjX2hlYWRlciBpbiB1dWlkL3V1aWQuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLSMKKy0jIENoZWNrIGZvciBQT1NJWCB0aHJlYWQgc3VwcG9ydC4KKy0jCistCistCistCistYWNfZXh0PWMKKy1hY19jcHA9JyRDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKy1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKy0KKy1hY3hfcHRocmVhZF9vaz1ubworLQorLSMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKKy0jIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1ZTY0IG9yIFNlcXVlbnQpLgorLSMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKy0KKy0jIEZpcnN0IG9mIGFsbCwgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgb2YgdGhlIFBUSFJFQURfTElCUywKKy0jIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworLSMgdGhlbToKKy1pZiB0ZXN0IHgiJFBUSFJFQURfTElCUyRQVEhSRUFEX0NGTEFHUyIgIT0geDsgdGhlbgorLSAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorLSAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHRocmVhZF9qb2luIGluIExJQlM9JFBUSFJFQURfTElCUyB3aXRoIENGTEFHUz0kUFRIUkVBRF9DRkxBR1MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTLi4uICRFQ0hPX0MiID4mNjsgfQorLSAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKy0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy1jaGFyIHB0aHJlYWRfam9pbiAoKTsKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiBwdGhyZWFkX2pvaW4gKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGFjeF9wdGhyZWFkX29rPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQorLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWN4X3B0aHJlYWRfb2siID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY3hfcHRocmVhZF9vayIgPiY2OyB9CistICAgICAgICBpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKy0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKy0gICAgICAgIGZpCistICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorLSAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCistZmkKKy0KKy0jIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CistIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCistIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKKy0jIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCistCistIyBDcmVhdGUgYSBsaXN0IG9mIHRocmVhZCBmbGFncyB0byB0cnkuICBJdGVtcyBzdGFydGluZyB3aXRoIGEgIi0iIGFyZQorLSMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorLSMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKKy0jIHdoaWNoIGlzIGEgcHJvZ3JhbSByZXR1cm5pbmcgdGhlIGZsYWdzIGZvciB0aGUgUHRoIGVtdWxhdGlvbiBsaWJyYXJ5LgorLQorLWFjeF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1LdGhyZWFkIC1rdGhyZWFkIGx0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhyZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgorLQorLSMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKy0jIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgorLQorLSMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCistIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCistIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworLSMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQorLSMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRocmVhZCBzaW5jZSBTTVAtYWJsZSkKKy0jIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorLSMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKQorLSMgLXB0aHJlYWRzOiBTb2xhcmlzL2djYworLSMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKy0jIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKKy0jICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVzIGRlZmluZXMgcHRocmVhZHMgdG9vOworLSMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorLSMgICAgICAuLi4gLW10IGlzIGFsc28gdGhlIHB0aHJlYWRzIGZsYWcgZm9yIEhQL2FDQworLSMgcHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCistIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCistIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCistCistY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKy0gICAgICAgICpzb2xhcmlzKikKKy0KKy0gICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCistICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCistICAgICAgICAjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gIChXZSBuZWVkIHRvIGxpbmsgd2l0aCAtcHRocmVhZHMvLW10LworLSAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCistICAgICAgICAjIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQKKy0gICAgICAgICMgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28sCistICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CistCistICAgICAgICBhY3hfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRhY3hfcHRocmVhZF9mbGFncyIKKy0gICAgICAgIDs7CistZXNhYworLQorLWlmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCistZm9yIGZsYWcgaW4gJGFjeF9wdGhyZWFkX2ZsYWdzOyBkbworLQorLSAgICAgICAgY2FzZSAkZmxhZyBpbgorLSAgICAgICAgICAgICAgICBub25lKQorLSAgICAgICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzLi4uICRFQ0hPX0MiID4mNjsgfQorLSAgICAgICAgICAgICAgICA7OworLQorLSAgICAgICAgICAgICAgICAtKikKKy0gICAgICAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWciID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWcuLi4gJEVDSE9fQyIgPiY2OyB9CistICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyIKKy0gICAgICAgICAgICAgICAgOzsKKy0KKy0JCXB0aHJlYWQtY29uZmlnKQorLQkJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwdGhyZWFkLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IHB0aHJlYWQtY29uZmlnOyBhY193b3JkPSQyCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGlmIHRlc3QgLW4gIiRhY3hfcHRocmVhZF9jb25maWciOyB0aGVuCistICBhY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZz0iJGFjeF9wdGhyZWFkX2NvbmZpZyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCistZWxzZQorLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKy1mb3IgYXNfZGlyIGluICRQQVRICistZG8KKy0gIElGUz0kYXNfc2F2ZV9JRlMKKy0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWc9InllcyIKKy0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorLSAgICBicmVhayAyCistICBmaQorLWRvbmUKKy1kb25lCistSUZTPSRhc19zYXZlX0lGUworLQorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnIiAmJiBhY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZz0ibm8iCistZmkKKy1maQorLWFjeF9wdGhyZWFkX2NvbmZpZz0kYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWcKKy1pZiB0ZXN0IC1uICIkYWN4X3B0aHJlYWRfY29uZmlnIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWN4X3B0aHJlYWRfY29uZmlnIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWN4X3B0aHJlYWRfY29uZmlnIiA+JjY7IH0KKy1lbHNlCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKy1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CistZmkKKy0KKy0KKy0JCWlmIHRlc3QgeCIkYWN4X3B0aHJlYWRfY29uZmlnIiA9IHhubzsgdGhlbiBjb250aW51ZTsgZmkKKy0JCVBUSFJFQURfQ0ZMQUdTPSJgcHRocmVhZC1jb25maWcgLS1jZmxhZ3NgIgorLQkJUFRIUkVBRF9MSUJTPSJgcHRocmVhZC1jb25maWcgLS1sZGZsYWdzYCBgcHRocmVhZC1jb25maWcgLS1saWJzYCIKKy0JCTs7CistCistICAgICAgICAgICAgICAgICopCistICAgICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnLi4uICRFQ0hPX0MiID4mNjsgfQorLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sJGZsYWciCistICAgICAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistCistICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorLSAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorLSAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKy0KKy0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLiAgV2UgbXVzdCBpbmNsdWRlIHB0aHJlYWQuaCwKKy0gICAgICAgICMgc2luY2Ugc29tZSBmdW5jdGlvbnMgbWF5IGJlIG1hY3Jvcy4gIChPbiB0aGUgU2VxdWVudCwgd2UKKy0gICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVyIGNvbXBpbGUuKQorLSAgICAgICAgIyBXZSBjaGVjayBmb3IgcHRocmVhZF9qb2luIGJlY2F1c2UgaXQgaXMgaW4gLWxwdGhyZWFkIG9uIElSSVgKKy0gICAgICAgICMgd2hpbGUgcHRocmVhZF9jcmVhdGUgaXMgaW4gbGliYy4gIFdlIGNoZWNrIGZvciBwdGhyZWFkX2F0dHJfaW5pdAorLSAgICAgICAgIyBkdWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKKy0gICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2ggYmVjYXVzZSBpdCBpcyBvbmUgb2YgdGhlIGZldyBwdGhyZWFkCistICAgICAgICAjIGZ1bmN0aW9ucyBvbiBTb2xhcmlzIHRoYXQgZG9lc24ndCBoYXZlIGEgbm9uLWZ1bmN0aW9uYWwgbGliYyBzdHViLgorLSAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVhdGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgorLSAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8cHRocmVhZC5oPgorLWludAorLW1haW4gKCkKKy17CistcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOworLSAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKy0gICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgYWN4X3B0aHJlYWRfb2s9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistCistICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorLSAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCistCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY3hfcHRocmVhZF9vayIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjeF9wdGhyZWFkX29rIiA+JjY7IH0KKy0gICAgICAgIGlmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGZpCistCistICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKy0gICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCistZG9uZQorLWZpCistCistIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKKy1pZiB0ZXN0ICJ4JGFjeF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIHNhdmVfTElCUz0iJExJQlMiCistICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorLSAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorLQorLSAgICAgICAgIyBEZXRlY3QgQUlYIGxvc3NhZ2U6IEpPSU5BQkxFIGF0dHJpYnV0ZSBpcyBjYWxsZWQgVU5ERVRBQ0hFRC4KKy0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZS4uLiAkRUNIT19DIiA+JjY7IH0KKy0JYXR0cl9uYW1lPXVua25vd24KKy0JZm9yIGF0dHIgaW4gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRDsgZG8KKy0JICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHB0aHJlYWQuaD4KKy1pbnQKKy1tYWluICgpCisteworLWludCBhdHRyPSRhdHRyOyByZXR1cm4gYXR0cjsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgYXR0cl9uYW1lPSRhdHRyOyBicmVhaworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQorLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLQlkb25lCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhdHRyX25hbWUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhdHRyX25hbWUiID4mNjsgfQorLSAgICAgICAgaWYgdGVzdCAiJGF0dHJfbmFtZSIgIT0gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEU7IHRoZW4KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAkYXR0cl9uYW1lCistX0FDRU9GCistCistICAgICAgICBmaQorLQorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMuLi4gJEVDSE9fQyIgPiY2OyB9CistICAgICAgICBmbGFnPW5vCistICAgICAgICBjYXNlICIke2hvc3RfY3B1fS0ke2hvc3Rfb3N9IiBpbgorLSAgICAgICAgICAgICotYWl4KiB8ICotZnJlZWJzZCogfCAqLWRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CistICAgICAgICAgICAgKnNvbGFyaXMqIHwgKi1vc2YqIHwgKi1ocHV4KikgZmxhZz0iLURfUkVFTlRSQU5UIjs7CistICAgICAgICBlc2FjCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR7ZmxhZ30iID4mNQorLWVjaG8gIiR7RUNIT19UfSR7ZmxhZ30iID4mNjsgfQorLSAgICAgICAgaWYgdGVzdCAieCRmbGFnIiAhPSB4bm87IHRoZW4KKy0gICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgorLSAgICAgICAgZmkKKy0KKy0gICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCistICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKy0KKy0gICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogbXVzdCBjb21waWxlIHdpdGggeGxjX3Igb3IgY2NfcgorLQlpZiB0ZXN0IHgiJEdDQyIgIT0geHllczsgdGhlbgorLSAgICAgICAgICBmb3IgYWNfcHJvZyBpbiB4bGNfciBjY19yCistZG8KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9wcm9nX1BUSFJFQURfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCistICBhY19jdl9wcm9nX1BUSFJFQURfQ0M9IiRQVEhSRUFEX0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKy1lbHNlCistYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorLWZvciBhc19kaXIgaW4gJFBBVEgKKy1kbworLSAgSUZTPSRhc19zYXZlX0lGUworLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKy0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX1BUSFJFQURfQ0M9IiRhY19wcm9nIgorLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CistICAgIGJyZWFrIDIKKy0gIGZpCistZG9uZQorLWRvbmUKKy1JRlM9JGFzX3NhdmVfSUZTCistCistZmkKKy1maQorLVBUSFJFQURfQ0M9JGFjX2N2X3Byb2dfUFRIUkVBRF9DQworLWlmIHRlc3QgLW4gIiRQVEhSRUFEX0NDIjsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUFRIUkVBRF9DQyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JFBUSFJFQURfQ0MiID4mNjsgfQorLWVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKy1maQorLQorLQorLSAgdGVzdCAtbiAiJFBUSFJFQURfQ0MiICYmIGJyZWFrCistZG9uZQorLXRlc3QgLW4gIiRQVEhSRUFEX0NDIiB8fCBQVEhSRUFEX0NDPSIke0NDfSIKKy0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgUFRIUkVBRF9DQz0kQ0MKKy0JZmkKKy1lbHNlCistICAgICAgICBQVEhSRUFEX0NDPSIkQ0MiCistZmkKKy0KKy0KKy0KKy0KKy0KKy0jIEZpbmFsbHksIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EL0FDVElPTi1JRi1OT1QtRk9VTkQ6CistaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfUFRIUkVBRCAxCistX0FDRU9GCistCistICAgICAgICA6CistZWxzZQorLSAgICAgICAgYWN4X3B0aHJlYWRfb2s9bm8KKy0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyBQT1NJWCB0aHJlYWRzLiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzIFBPU0lYIHRocmVhZHMuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLWZpCistYWNfZXh0PWMKKy1hY19jcHA9JyRDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKy1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKy0KKy0KKy0KKy1DRkxBR1M9IiR7UFRIUkVBRF9DRkxBR1N9ICR7Q0ZMQUdTfSIKKy1DUFBGTEFHUz0iJHtQVEhSRUFEX0NQUEZMQUdTfSAke0NQUEZMQUdTfSIKKy1MREZMQUdTPSIke1BUSFJFQURfTERGTEFHU30gJHtMREZMQUdTfSIKKy1MSUJTPSIke1BUSFJFQURfTElCU30gJHtMSUJTfSIKKy0KKy0jCistIyBDaGVjayBmb3Igd2hlcmUgY2xvY2tfZ2V0dGltZSBhbmQgZnJpZW5kcyBhcmUgbG9jYXRlZC4KKy0jCistCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gLWxydCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgY2xvY2tfZ2V0dGltZSBpbiAtbHJ0Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworLUxJQlM9Ii1scnQgICRMSUJTIgorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciBjbG9ja19nZXR0aW1lICgpOworLWludAorLW1haW4gKCkKKy17CistcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZT1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWUiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBIQVZFX0xJQlJUIDEKKy1fQUNFT0YKKy0KKy0gIExJQlM9Ii1scnQgJExJQlMiCistCistZmkKKy0KKy0KKy0jCistIyBDaGVjayBmb3IgRExGQ04gc3VwcG9ydC4KKy0jCistCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworLUxJQlM9Ii1sZGwgICRMSUJTIgorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciBkbG9wZW4gKCk7CistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gZGxvcGVuICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9saWJfZGxfZGxvcGVuPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfTElCREwgMQorLV9BQ0VPRgorLQorLSAgTElCUz0iLWxkbCAkTElCUyIKKy0KKy1maQorLQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLSMKKy0jIENoZWNrIGZvciBtYXRoIHN1cHBvcnQuCistIworLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZsb29yIGluIC1sbS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2xpYl9tX2Zsb29yK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKy1MSUJTPSItbG0gICRMSUJTIgorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciBmbG9vciAoKTsKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiBmbG9vciAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgYWNfY3ZfbGliX21fZmxvb3I9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X2xpYl9tX2Zsb29yPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21fZmxvb3IiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbV9mbG9vciIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfbGliX21fZmxvb3IgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfTElCTSAxCistX0FDRU9GCistCistICBMSUJTPSItbG0gJExJQlMiCistCistZmkKKy0KKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIG1hdGguaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLSMKKy0jIENoZWNrIGZvciB3aGVyZSB0aGUgZGVmYXVsdCBsb2NhbCB0aW1lIHpvbmUgZGF0YSBmaWxlIGFuZCB0aW1lIHpvbmUKKy0jIGRhdGEgZmlsZXMgYXJlL3dpbGwgYmUgbG9jYXRlZCBvbiB0aGUgdGFyZ2V0IHN5c3RlbSAodGhpcyBtaWdodCBiZQorLSMgZGlmZmVyZW50IGZyb20gd2hlcmUgdGhleSBhcmUgb24gdGhlIGJ1aWxkIHN5c3RlbSkuCistIworLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGRlZmF1bHQgbG9jYWwgdGltZSB6b25lIGRhdGEgZmlsZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBkZWZhdWx0IGxvY2FsIHRpbWUgem9uZSBkYXRhIGZpbGUuLi4gJEVDSE9fQyIgPiY2OyB9CistCistIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ei1kZWZhdWx0IHdhcyBnaXZlbi4KKy1pZiB0ZXN0ICIke3dpdGhfdHpfZGVmYXVsdCtzZXR9IiA9IHNldDsgdGhlbgorLSAgd2l0aHZhbD0kd2l0aF90el9kZWZhdWx0OyB0el9kZWZhdWx0X2ZpbGU9JHt3aXRodmFsfQorLWVsc2UKKy0gIHR6X2RlZmF1bHRfZmlsZT0iL2V0Yy9sb2NhbHRpbWUiCistZmkKKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR7dHpfZGVmYXVsdF9maWxlfSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JHt0el9kZWZhdWx0X2ZpbGV9IiA+JjY7IH0KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBUWkRFRkFVTFQgIiR7dHpfZGVmYXVsdF9maWxlfSIKKy1fQUNFT0YKKy0KKy0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSB0aW1lIHpvbmUgZGF0YSBmaWxlcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSB0aW1lIHpvbmUgZGF0YSBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KKy0KKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXR6LWRhdGEgd2FzIGdpdmVuLgorLWlmIHRlc3QgIiR7d2l0aF90el9kYXRhK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSR3aXRoX3R6X2RhdGE7IHR6X2RhdGFfZGlyPSR7d2l0aHZhbH0KKy1lbHNlCistICB0el9kYXRhX2Rpcj0iL3Vzci9zaGFyZS96b25laW5mbyIKKy1maQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHt0el9kYXRhX2Rpcn0iID4mNQorLWVjaG8gIiR7RUNIT19UfSR7dHpfZGF0YV9kaXJ9IiA+JjY7IH0KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBUWkRJUiAiJHt0el9kYXRhX2Rpcn0iCistX0FDRU9GCistCistCistIworLSMgQ2hlY2sgZm9yIHR6Y29kZSBoZWFkZXIgc3VwcG9ydC4KKy0jCistIyBNb3N0IHN5c3RlbXMgYmFzZWQgb24gdGhlIEdOVSBDIGxpYnJhcnkgZG8gbm90IGhhdmUgdGhlIGhlYWRlciBmcm9tCistIyB0emNvZGUgKHNlZSBmdHA6Ly9lbHNpZS5uY2kubmloLmdvdi9wdWIvKSwgInR6ZmlsZS5oIiBpbnN0YWxsZWQgd2hpY2ggaXMKKy0jIG5lZWRlZC4gQ2hlY2sgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2Vzbid0IGxldCB0aGUgdXNlciBwb2ludCB1cyBhdCBpdC4KKy0jCistCistCistIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ei1pbmNsdWRlcyB3YXMgZ2l2ZW4uCistaWYgdGVzdCAiJHt3aXRoX3R6X2luY2x1ZGVzK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSR3aXRoX3R6X2luY2x1ZGVzOworLQkJaWYgdGVzdCAieCR7d2l0aHZhbH0iICE9ICJ4eWVzIjsgdGhlbgorLQkJCWlmIHRlc3QgLWQgIiR7d2l0aHZhbH0vaW5jbHVkZSI7IHRoZW4KKy0JCQkJVFpfQ1BQRkxBR1M9Ii1JJHt3aXRodmFsfS9pbmNsdWRlIgorLQkJCWVsc2UKKy0JCQkJVFpfQ1BQRkxBR1M9Ii1JJHt3aXRodmFsfSIKKy0JCQlmaQorLQkJZmkKKy0KKy1maQorLQorLQorLUNQUEZMQUdTPSIke1RaX0NQUEZMQUdTfSAke0NQUEZMQUdTfSIKKy0KKy1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90emZpbGVfaCtzZXR9IiA9IHNldDsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6ZmlsZS5oIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0emZpbGUuaC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90emZpbGVfaCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90emZpbGVfaCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90emZpbGVfaCIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdHpmaWxlLmggdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHR6ZmlsZS5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPHR6ZmlsZS5oPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0emZpbGUuaCBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB0emZpbGUuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDx0emZpbGUuaD4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHR6ZmlsZS5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHR6ZmlsZS5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0emZpbGUuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0emZpbGUuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHR6ZmlsZS5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogdHpmaWxlLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdHpmaWxlLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogdHpmaWxlLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHR6ZmlsZS5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogdHpmaWxlLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdHpmaWxlLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogdHpmaWxlLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHR6ZmlsZS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0emZpbGUuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHR6ZmlsZS5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogdHpmaWxlLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0emZpbGUuaCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdHpmaWxlLmguLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdHpmaWxlX2grc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgYWNfY3ZfaGVhZGVyX3R6ZmlsZV9oPSRhY19oZWFkZXJfcHJlcHJvYworLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3R6ZmlsZV9oIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3R6ZmlsZV9oIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl90emZpbGVfaCA9IHllczsgdGhlbgorLSAgdHJ1ZQorLWVsc2UKKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyAndHpmaWxlLmgnLiBEb3dubG9hZCB0aGUgbGF0ZXN0IHR6Y29kZSBwYWNrYWdlIGZyb20gJ2Z0cDovL2Vsc2llLm5jaS5uaWguZ292L3B1Yi8nIGFuZC9vciB1c2UgdGhlICctLXdpdGgtdHotaW5jbHVkZXM9RElSJyBjb25maWd1cmF0aW9uIG9wdGlvbi4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6ICR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyAndHpmaWxlLmgnLiBEb3dubG9hZCB0aGUgbGF0ZXN0IHR6Y29kZSBwYWNrYWdlIGZyb20gJ2Z0cDovL2Vsc2llLm5jaS5uaWguZ292L3B1Yi8nIGFuZC9vciB1c2UgdGhlICctLXdpdGgtdHotaW5jbHVkZXM9RElSJyBjb25maWd1cmF0aW9uIG9wdGlvbi4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistZmkKKy0KKy0KKy0KKy0jCistIyBDaGVjayBmb3IgaGVhZGVycworLSMKKy0KKy0KKy0KKy0KKy0KKy0KKy1hY19oZWFkZXJfZGlyZW50PW5vCistZm9yIGFjX2hkciBpbiBkaXJlbnQuaCBzeXMvbmRpci5oIHN5cy9kaXIuaCBuZGlyLmg7IGRvCistICBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX2hkciIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUiIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPCRhY19oZHI+CistCistaW50CistbWFpbiAoKQorLXsKKy1pZiAoKERJUiAqKSAwKQorLXJldHVybiAwOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZHIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWFjX2hlYWRlcl9kaXJlbnQ9JGFjX2hkcjsgYnJlYWsKKy1maQorLQorLWRvbmUKKy0jIFR3byB2ZXJzaW9ucyBvZiBvcGVuZGlyIGV0IGFsLiBhcmUgaW4gLWxkaXIgYW5kIC1seCBvbiBTQ08gWGVuaXguCistaWYgdGVzdCAkYWNfaGVhZGVyX2RpcmVudCA9IGRpcmVudC5oOyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKy0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy1jaGFyIG9wZW5kaXIgKCk7CistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gb3BlbmRpciAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1mb3IgYWNfbGliIGluICcnIGRpcjsgZG8KKy0gIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCistICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKy0gIGVsc2UKKy0gICAgYWNfcmVzPS1sJGFjX2xpYgorLSAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCistICBmaQorLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSRhY19yZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0CistICBpZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuCistICBicmVhaworLWZpCistZG9uZQorLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIDoKKy1lbHNlCistICBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworLWZpCistcm0gY29uZnRlc3QuJGFjX2V4dAorLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY2OyB9CistYWNfcmVzPSRhY19jdl9zZWFyY2hfb3BlbmRpcgorLWlmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuCistICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorLQorLWZpCistCistZWxzZQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciBvcGVuZGlyICgpOworLWludAorLW1haW4gKCkKKy17CistcmV0dXJuIG9wZW5kaXIgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistZm9yIGFjX2xpYiBpbiAnJyB4OyBkbworLSAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKy0gICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorLSAgZWxzZQorLSAgICBhY19yZXM9LWwkYWNfbGliCistICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKy0gIGZpCistICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9JGFjX3JlcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQorLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQKKy0gIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGJyZWFrCistZmkKKy1kb25lCistaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgorLSAgOgorLWVsc2UKKy0gIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCistZmkKKy1ybSBjb25mdGVzdC4kYWNfZXh0CistTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjY7IH0KKy1hY19yZXM9JGFjX2N2X3NlYXJjaF9vcGVuZGlyCistaWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4KKy0gIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCistCistZmkKKy0KKy1maQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy0jaW5jbHVkZSA8c3RkYm9vbC5oPgorLSNpZm5kZWYgYm9vbAorLSAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCistI2VuZGlmCistI2lmbmRlZiBmYWxzZQorLSAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorLSNlbmRpZgorLSNpZiBmYWxzZQorLSAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorLSNlbmRpZgorLSNpZm5kZWYgdHJ1ZQorLSAiZXJyb3I6IHRydWUgaXMgbm90IGRlZmluZWQiCistI2VuZGlmCistI2lmIHRydWUgIT0gMQorLSAiZXJyb3I6IHRydWUgaXMgbm90IDEiCistI2VuZGlmCistI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorLSAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorLSNlbmRpZgorLQorLQlzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKy0KKy0JY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CistCWNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKy0JY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworLQljaGFyIGRbKGJvb2wpIDAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKy0JYm9vbCBlID0gJnM7CistCWNoYXIgZlsoX0Jvb2wpIDAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CistCWNoYXIgZ1t0cnVlXTsKKy0JY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKy0JY2hhciBpW3NpemVvZiBzLnRdOworLQllbnVtIHsgaiA9IGZhbHNlLCBrID0gdHJ1ZSwgbCA9IGZhbHNlICogdHJ1ZSwgbSA9IHRydWUgKiAyNTYgfTsKKy0JX0Jvb2wgblttXTsKKy0JY2hhciBvW3NpemVvZiBuID09IG0gKiBzaXplb2YgblswXSA/IDEgOiAtMV07CistCWNoYXIgcFstMSAtIChfQm9vbCkgMCA8IDAgJiYgLTEgLSAoYm9vbCkgMCA8IDAgPyAxIDogLTFdOworLSMJaWYgZGVmaW5lZCBfX3hsY19fIHx8IGRlZmluZWQgX19HTlVDX18KKy0JIC8qIENhdGNoIGEgYnVnIGluIElCTSBBSVggeGxjIGNvbXBpbGVyIHZlcnNpb24gNi4wLjAuMAorLQkgICAgcmVwb3J0ZWQgYnkgSmFtZXMgTGVtbGV5IG9uIDIwMDUtMTAtMDU7IHNlZQorLQkgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMC9tc2cwMDA4Ni5odG1sCistCSAgICBUaGlzIHRlc3QgaXMgbm90IHF1aXRlIHJpZ2h0LCBzaW5jZSB4bGMgaXMgYWxsb3dlZCB0bworLQkgICAgcmVqZWN0IHRoaXMgcHJvZ3JhbSwgYXMgdGhlIGluaXRpYWxpemVyIGZvciB4bGNidWcgaXMKKy0JICAgIG5vdCBvbmUgb2YgdGhlIGZvcm1zIHRoYXQgQyByZXF1aXJlcyBzdXBwb3J0IGZvci4KKy0JICAgIEhvd2V2ZXIsIGRvaW5nIHRoZSB0ZXN0IHJpZ2h0IHdvdWxkIHJlcXVpcmUgYSBydW50aW1lCistCSAgICB0ZXN0LCBhbmQgdGhhdCB3b3VsZCBtYWtlIGNyb3NzLWNvbXBpbGF0aW9uIGhhcmRlci4KKy0JICAgIExldCB1cyBob3BlIHRoYXQgSUJNIGZpeGVzIHRoZSB4bGMgYnVnLCBhbmQgYWxzbyBhZGRzCistCSAgICBzdXBwb3J0IGZvciB0aGlzIGtpbmQgb2YgY29uc3RhbnQgZXhwcmVzc2lvbi4gIEluIHRoZQorLQkgICAgbWVhbnRpbWUsIHRoaXMgdGVzdCB3aWxsIHJlamVjdCB4bGMsIHdoaWNoIGlzIE9LLCBzaW5jZQorLQkgICAgb3VyIHN0ZGJvb2wuaCBzdWJzdGl0dXRlIHNob3VsZCBzdWZmaWNlLiAgV2UgYWxzbyB0ZXN0CistCSAgICB0aGlzIHdpdGggR0NDLCB3aGVyZSBpdCBzaG91bGQgd29yaywgdG8gZGV0ZWN0IG1vcmUKKy0JICAgIHF1aWNrbHkgd2hldGhlciBzb21lb25lIG1lc3NlcyB1cCB0aGUgdGVzdCBpbiB0aGUKKy0JICAgIGZ1dHVyZS4gICovCistCSBjaGFyIGRpZ3NbXSA9ICIwMTIzNDU2Nzg5IjsKKy0JIGludCB4bGNidWcgPSAxIC8gKCYoZGlncyArIDUpWy0yICsgKGJvb2wpIDFdID09ICZkaWdzWzRdID8gMSA6IC0xKTsKKy0jCWVuZGlmCistCS8qIENhdGNoIGEgYnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKKy0JICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDMtMTIvbXNnMDIzMDMuaHRtbAorLQkgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYxLmh0bWwKKy0JICovCistCV9Cb29sIHEgPSB0cnVlOworLQlfQm9vbCAqcHEgPSAmcTsKKy0KKy1pbnQKKy1tYWluICgpCisteworLQorLQkqcHEgfD0gcTsKKy0JKnBxIHw9ICEgcTsKKy0JLyogUmVmZXIgdG8gZXZlcnkgZGVjbGFyZWQgdmFsdWUsIHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICAqLworLQlyZXR1cm4gKCFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaSArICEhaiArICFrICsgISFsCistCQkrICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEpOworLQorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjY7IH0KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0Jvb2wiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9Cb29sLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9fQm9vbCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistdHlwZWRlZiBfQm9vbCBhY19fdHlwZV9uZXdfOworLWludAorLW1haW4gKCkKKy17CistaWYgKChhY19fdHlwZV9uZXdfICopIDApCistICByZXR1cm4gMDsKKy1pZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKy0gIHJldHVybiAwOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl90eXBlX19Cb29sPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl90eXBlX19Cb29sPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX19Cb29sIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl90eXBlX19Cb29sID0geWVzOyB0aGVuCistCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgSEFWRV9fQk9PTCAxCistX0FDRU9GCistCistCistZmkKKy0KKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0ZGFyZy5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZmxvYXQuaD4KKy0KKy1pbnQKKy1tYWluICgpCisteworLQorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLQorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCistICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0KKy1fQUNFT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICA6CistZWxzZQorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLQorLWZpCistCistaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKy0gICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLQorLV9BQ0VPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICA6CistZWxzZQorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLQorLWZpCistCistaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKy0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKy0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistICA6CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorLSMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKy0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCistI2Vsc2UKKy0jIGRlZmluZSBJU0xPV0VSKGMpIFwKKy0JCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKy0JCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCistIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKy0jZW5kaWYKKy0KKy0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQorLWludAorLW1haW4gKCkKKy17CistICBpbnQgaTsKKy0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKy0gICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKy0gICAgICByZXR1cm4gMjsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIDoKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSggZXhpdCAkYWNfc3RhdHVzICkKKy1hY19jdl9oZWFkZXJfc3RkYz1ubworLWZpCistcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy0KKy0KKy1maQorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy90aW1lLmg+CistI2luY2x1ZGUgPHRpbWUuaD4KKy0KKy1pbnQKKy1tYWluICgpCisteworLWlmICgoc3RydWN0IHRtICopIDApCistcmV0dXJuIDA7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2N2X2hlYWRlcl90aW1lPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl9oZWFkZXJfdGltZT1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgorLQorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorLV9BQ0VPRgorLQorLWZpCistCistCistCistZm9yIGFjX2hlYWRlciBpbiBhbGxvY2EuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gYXJwYS9uYW1lc2VyLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIGFzc2VydC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBkbnNfc2QuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gZXJybm8uaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gZmNudGwuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gbGltaXRzLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIGxvY2FsZS5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBtYWxsb2MuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gbWFsbG9jL21hbGxvYy5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBuZXRpbmV0L2luLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIG9iamMvb2JqYy5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBvYmpjL3J1bnRpbWUuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gcG9sbC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBwd2QuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gc2VtYXBob3JlLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHNldGptcC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBzaWduYWwuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gc3RkYXJnLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHN0ZGJvb2wuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gc3RkZGVmLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHN0ZGludC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBzdGRpby5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gc3RyaW5nLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHN5c2xvZy5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB0aW1lLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiB4bG9jYWxlLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorLQorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CistCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKy1maQorLQorLWRvbmUKKy0KKy0KKy1mb3IgYWNfaGVhZGVyIGluIHN5cy9jZGVmcy5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKy1maQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CistCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKy0KKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCistZmkKKy0KKy1kb25lCistCistCistZm9yIGFjX2hlYWRlciBpbiBzeXMvZXJybm8uaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorLQorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCistCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorLQorLWZpCistCistZG9uZQorLQorLQorLWZvciBhY19oZWFkZXIgaW4gc3lzL2ZjbnRsLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisgCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKyAKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorIAorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorIAorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCisgCistZmkKKyAKKy1kb25lCisgCisgCistZm9yIGFjX2hlYWRlciBpbiBzeXMvaW9jdGwuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorIAorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCisgCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKyAKKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAKKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorIAorLWZpCisgCistZG9uZQorIAorIAorLWZvciBhY19oZWFkZXIgaW4gc3lzL21tYW4uaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorIAorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworLWZpCisgCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKyAKKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAKKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorIAorLWZpCisgCistZG9uZQorIAorIAorLWZvciBhY19oZWFkZXIgaW4gc3lzL3BhcmFtLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKyAKKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisgCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CisraGFyZGNvZGVfYWN0aW9uX0NYWD0KKytpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHx8CisrICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwKKysgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiID0gIlh5ZXMiIDsgdGhlbgorKworKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICE9IG5vICYmCisrICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisrICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisrICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisrICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAhPSBubyAmJgorKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiAhPSBubzsgdGhlbgorKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluaworKyAgZWxzZQorKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQorKyAgZmkKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisrICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworKyAgIyBkaXJlY3Rvcmllcy4KKysgIGhhcmRjb2RlX2FjdGlvbl9DWFg9dW5zdXBwb3J0ZWQKKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNQorKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9CisgCisraWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID0gcmVsaW5rIHx8CisrICAgdGVzdCAiJGluaGVyaXRfcnBhdGhfQ1hYIiA9IHllczsgdGhlbgorKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisrICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisrZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKysgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworIGZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCisgCistZmkKKyAKKy1kb25lCisgCisgCistZm9yIGFjX2hlYWRlciBpbiBzeXMvc29ja2V0LmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKyAKKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisrCisrICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworKyAgTERDWFg9JExECisrICBMRD0kbHRfc2F2ZV9MRAorKyAgR0NDPSRsdF9zYXZlX0dDQworKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKysgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKysgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisrICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworKworIAorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisgCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisgCistZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKyAKKy1maQorIAorLWRvbmUKKyAKKyAKKy1mb3IgYWNfaGVhZGVyIGluIHN5cy9zdGF0LmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworLWZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKyAKKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisrICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKKysKKyAKKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAKKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorIAorKyMgT25seSBleHBhbmQgb25jZToKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KKytMTl9TPSRhc19sbl9zCisraWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisrJGFzX2VjaG8gInllcyIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CisrJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CisgZmkKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisrICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorIGRvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKKytpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKyAKKyAKKy1mb3IgYWNfaGVhZGVyIGluIHN5cy90aW1lLmgKKy1kbworLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworK2ZpCisrZmkKKythY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCisraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorKyAgICBSQU5MSUI9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisrICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisrICBmaQorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKysgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorIGZpCisgCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKysjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGNtcDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3BhdGhfQ01QKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkQ01QIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKysgIGFjX2N2X3BhdGhfQ01QPSIkQ01QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKysgIDs7CisrICAqKQorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3BhdGhfQ01QPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CisrICA7OworIGVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2ZpCisrQ01QPSRhY19jdl9wYXRoX0NNUAorK2lmIHRlc3QgLW4gIiRDTVAiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENNUCIgPiY1CisrJGFzX2VjaG8gIiRDTVAiID4mNjsgfQorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAKKy1maQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorIAorKworKyMgU3VwcG9ydCBidWlsZGluZyBETExzIG9uIFdpbmRvd3MKKytlbmFibGVfd2luMzJfZGxsPXllcworKworK2Nhc2UgJGhvc3QgaW4KKysqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hczsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfQVMrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisrICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrQVM9JGFjX2N2X3Byb2dfQVMKKytpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFTIiA+JjUKKyskYXNfZWNobyAiJEFTIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy1kb25lCistCisgCistZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKysgIGFjX2N0X0FTPSRBUworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworK2ZpCisrYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKKytpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0FTIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorLQorLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKy0gIHllczpubzogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKy0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCistICAgIDs7CistICBubzp5ZXM6KiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKy0gICAgKCBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYmZ1bGdoYW1AdXNlcnMuc291cmNlZm9yZ2UubmV0ICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CisrICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKysgICAgQVM9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgICBBUz0kYWNfY3RfQVMKKysgIGZpCisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgQVM9IiRhY19jdl9wcm9nX0FTIgorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorIAorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKyBmaQorLQorLWRvbmUKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorIAorIAorLWZvciBhY19oZWFkZXIgaW4gc3lzL3Vpby5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKy0KKy0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH07IHRoZW4KKy0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcworK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistICBhY19oZWFkZXJfcHJlcHJvYz1ubworKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKy0KKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLQorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCistCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorIGZpCisgCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisgZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKytmaQorK2ZpCisrT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCisraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisgCistIworLSMgQ2hlY2tzIGZvciB0eXBlcyBhbmQgc3RydWN0dXJlcworLSMKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ4X3QiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludDhfdC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2NfaW50OF90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKysgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19jdl9jX2ludDhfdD1ubworLSAgICAgZm9yIGFjX3R5cGUgaW4gJ2ludDhfdCcgJ2ludCcgJ2xvbmcgaW50JyBcCistCSAnbG9uZyBsb25nIGludCcgJ3Nob3J0IGludCcgJ3NpZ25lZCBjaGFyJzsgZG8KKy0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLWludAorLW1haW4gKCkKKy17Cistc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoMCA8ICgkYWNfdHlwZSkgKCgoKCRhY190eXBlKSAxIDw8ICg4IC0gMikpIC0gMSkgKiAyICsgMSkpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKy0KKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLWludAorLW1haW4gKCkKKy17Cistc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCRhY190eXBlKSAoKCgoJGFjX3R5cGUpIDEgPDwgKDggLSAyKSkgLSAxKSAqIDIgKyAxKQorLQkgICAgICAgICA8ICgkYWNfdHlwZSkgKCgoKCRhY190eXBlKSAxIDw8ICg4IC0gMikpIC0gMSkgKiAyICsgMikpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytmaQorK2ZpCisrYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCisraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorKyAgICBPQkpEVU1QPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIDoKKysgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorKyAgZmkKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCisrZmkKKyAKKy0JY2FzZSAkYWNfdHlwZSBpbgorLSAgaW50OF90KSBhY19jdl9jX2ludDhfdD15ZXMgOzsKKy0gICopIGFjX2N2X2NfaW50OF90PSRhY190eXBlIDs7CisrICA7OworIGVzYWMKKyAKKy1maQorK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyAKKy1maQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICB0ZXN0ICIkYWNfY3ZfY19pbnQ4X3QiICE9IG5vICYmIGJyZWFrCistICAgICBkb25lCistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2ludDhfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW50OF90IiA+JjY7IH0KKy0gIGNhc2UgJGFjX2N2X2NfaW50OF90IGluICMoCistICBub3x5ZXMpIDs7ICMoCistICAqKQorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGludDhfdCAkYWNfY3ZfY19pbnQ4X3QKKy1fQUNFT0YKKy07OworLSAgZXNhYworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKyAKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQxNl90IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQxNl90Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY19pbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2N2X2NfaW50MTZfdD1ubworLSAgICAgZm9yIGFjX3R5cGUgaW4gJ2ludDE2X3QnICdpbnQnICdsb25nIGludCcgXAorLQkgJ2xvbmcgbG9uZyBpbnQnICdzaG9ydCBpbnQnICdzaWduZWQgY2hhcic7IGRvCistICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy1pbnQKKy1tYWluICgpCisteworLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKDAgPCAoJGFjX3R5cGUpICgoKCgkYWNfdHlwZSkgMSA8PCAoMTYgLSAyKSkgLSAxKSAqIDIgKyAxKSldOworLXRlc3RfYXJyYXkgWzBdID0gMAorK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKyAKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKworKworKworKworKyMKKysjIENoZWNrcyBmb3IgbGFuZ3VhZ2UgcXVhbGlmaWVycyBhbmQgc2VtYW50aWNzCisrIworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBjaGFyIGlzIHVuc2lnbmVkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNoYXIgaXMgdW5zaWduZWQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2NfY2hhcl91bnNpZ25lZCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyBpbnQKKyBtYWluICgpCisgeworLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkYWNfdHlwZSkgKCgoKCRhY190eXBlKSAxIDw8ICgxNiAtIDIpKSAtIDEpICogMiArIDEpCistCSAgICAgICAgIDwgKCRhY190eXBlKSAoKCgoJGFjX3R5cGUpIDEgPDwgKDE2IC0gMikpIC0gMSkgKiAyICsgMikpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKytzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGNoYXIpIC0xKSA8IDApXTsKKyt0ZXN0X2FycmF5IFswXSA9IDA7CisrcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworIAorICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICA6CisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3ZfY19jaGFyX3Vuc2lnbmVkPW5vCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWNhc2UgJGFjX3R5cGUgaW4KKy0gIGludDE2X3QpIGFjX2N2X2NfaW50MTZfdD15ZXMgOzsKKy0gICopIGFjX2N2X2NfaW50MTZfdD0kYWNfdHlwZSA7OworLWVzYWMKKy0KKysgIGFjX2N2X2NfY2hhcl91bnNpZ25lZD15ZXMKKyBmaQorLQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NoYXJfdW5zaWduZWQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY19jaGFyX3Vuc2lnbmVkIiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl9jX2NoYXJfdW5zaWduZWQgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAkYXNfZWNobyAiI2RlZmluZSBfX0NIQVJfVU5TSUdORURfXyAxIiA+PmNvbmZkZWZzLmgKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgdGVzdCAiJGFjX2N2X2NfaW50MTZfdCIgIT0gbm8gJiYgYnJlYWsKKy0gICAgIGRvbmUKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW50MTZfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW50MTZfdCIgPiY2OyB9CistICBjYXNlICRhY19jdl9jX2ludDE2X3QgaW4gIygKKy0gIG5vfHllcykgOzsgIygKKy0gICopCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgaW50MTZfdCAkYWNfY3ZfY19pbnQxNl90CistX0FDRU9GCistOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQzMl90IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQzMl90Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY19pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2NfY29uc3QrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19jdl9jX2ludDMyX3Q9bm8KKy0gICAgIGZvciBhY190eXBlIGluICdpbnQzMl90JyAnaW50JyAnbG9uZyBpbnQnIFwKKy0JICdsb25nIGxvbmcgaW50JyAnc2hvcnQgaW50JyAnc2lnbmVkIGNoYXInOyBkbworLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistaW50CistbWFpbiAoKQorLXsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgwIDwgKCRhY190eXBlKSAoKCgoJGFjX3R5cGUpIDEgPDwgKDMyIC0gMikpIC0gMSkgKiAyICsgMSkpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKyAKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorIGludAorIG1haW4gKCkKKyB7Cistc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCRhY190eXBlKSAoKCgoJGFjX3R5cGUpIDEgPDwgKDMyIC0gMikpIC0gMSkgKiAyICsgMSkKKy0JICAgICAgICAgPCAoJGFjX3R5cGUpICgoKCgkYWNfdHlwZSkgMSA8PCAoMzIgLSAyKSkgLSAxKSAqIDIgKyAyKSldOworLXRlc3RfYXJyYXkgWzBdID0gMAorKworKyNpZm5kZWYgX19jcGx1c3BsdXMKKysgIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcyBzb3J0IG9mIHRoaW5nLiAgKi8KKysgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisrICBjb25zdCBjaGFyc2V0IGNzID0geyAwLCAwIH07CisrICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworKyAgY2hhciAqKnBwYzsKKysgIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisrICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisrICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKysgIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKysgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisrICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisrICAgICBleHByZXNzaW9uICovCisrICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisrICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKysgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisrICArK3BjcGNjOworKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisrICBwY3BjYyA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwcGM7CisrICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZy4gICovCisrICAgIGNoYXIgdHg7CisrICAgIGNoYXIgKnQgPSAmdHg7CisrICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisrCisrICAgICp0KysgPSAwOworKyAgICBpZiAocykgcmV0dXJuIDA7CisrICB9CisrICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworKyAgICBpbnQgeFtdID0gezI1LCAxN307CisrICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisrICAgICsrZm9vOworKyAgfQorKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisrICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworKyAgICBpcHRyIHAgPSAwOworKyAgICArK3A7CisrICB9CisrICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzb3J0IG9mIHRoaW5nLCBzYXlpbmcKKysgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworKyAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9IGJ4OworKyAgICBzdHJ1Y3QgcyAqYiA9ICZieDsgYi0+aiA9IDU7CisrICB9CisrICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisrICAgIGlmICghZm9vKSByZXR1cm4gMDsKKysgIH0KKysgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKysjZW5kaWYKKyAKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgOgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2NfY29uc3Q9eWVzCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrICBhY19jdl9jX2NvbnN0PW5vCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9jX2NvbnN0IiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKyAKKy0JY2FzZSAkYWNfdHlwZSBpbgorLSAgaW50MzJfdCkgYWNfY3ZfY19pbnQzMl90PXllcyA7OworLSAgKikgYWNfY3ZfY19pbnQzMl90PSRhY190eXBlIDs7CistZXNhYworKyRhc19lY2hvICIjZGVmaW5lIGNvbnN0IC8qKi8iID4+Y29uZmRlZnMuaAorIAorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5saW5lLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorKyAgYWNfY3ZfY19pbmxpbmU9bm8KKytmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpZm5kZWYgX19jcGx1c3BsdXMKKyt0eXBlZGVmIGludCBmb29fdDsKKytzdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9CisrJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKysjZW5kaWYKKyAKKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9jX2lubGluZT0kYWNfa3cKKyBmaQorLQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICB0ZXN0ICIkYWNfY3ZfY19pbnQzMl90IiAhPSBubyAmJiBicmVhaworLSAgICAgZG9uZQorKyAgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhaworK2RvbmUKKysKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW50MzJfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW50MzJfdCIgPiY2OyB9CistICBjYXNlICRhY19jdl9jX2ludDMyX3QgaW4gIygKKy0gIG5vfHllcykgOzsgIygKKy0gICopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2lubGluZSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgaW50MzJfdCAkYWNfY3ZfY19pbnQzMl90CisrY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKysgIGlubGluZSB8IHllcykgOzsKKysgICopCisrICAgIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluCisrICAgICAgbm8pIGFjX3ZhbD07OworKyAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OworKyAgICBlc2FjCisrICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjaWZuZGVmIF9fY3BsdXNwbHVzCisrI2RlZmluZSBpbmxpbmUgJGFjX3ZhbAorKyNlbmRpZgorIF9BQ0VPRgorLTs7CistICBlc2FjCistCisrICAgIDs7CisrZXNhYworIAorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDY0X3QiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludDY0X3QuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9jX2ludDY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQy9DKysgcmVzdHJpY3Qga2V5d29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2NfcmVzdHJpY3QrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19jdl9jX2ludDY0X3Q9bm8KKy0gICAgIGZvciBhY190eXBlIGluICdpbnQ2NF90JyAnaW50JyAnbG9uZyBpbnQnIFwKKy0JICdsb25nIGxvbmcgaW50JyAnc2hvcnQgaW50JyAnc2lnbmVkIGNoYXInOyBkbworLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBhY19jdl9jX3Jlc3RyaWN0PW5vCisrICAgIyBUaGUgb3JkZXIgaGVyZSBjYXRlcnMgdG8gdGhlIGZhY3QgdGhhdCBDKysgZG9lcyBub3QgcmVxdWlyZSByZXN0cmljdC4KKysgICBmb3IgYWNfa3cgaW4gX19yZXN0cmljdCBfX3Jlc3RyaWN0X18gX1Jlc3RyaWN0IHJlc3RyaWN0OyBkbworKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorK3R5cGVkZWYgaW50ICogaW50X3B0cjsKKysJaW50IGZvbyAoaW50X3B0ciAkYWNfa3cgaXApIHsKKysJcmV0dXJuIGlwWzBdOworKyAgICAgICB9CisgaW50CisgbWFpbiAoKQorIHsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgwIDwgKCRhY190eXBlKSAoKCgoJGFjX3R5cGUpIDEgPDwgKDY0IC0gMikpIC0gMSkgKiAyICsgMSkpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKy0KKytpbnQgc1sxXTsKKysJaW50ICogJGFjX2t3IHQgPSBzOworKwl0WzBdID0gMDsKKysJcmV0dXJuIGZvbyh0KQorICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9jX3Jlc3RyaWN0PSRhY19rdworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrICAgICB0ZXN0ICIkYWNfY3ZfY19yZXN0cmljdCIgIT0gbm8gJiYgYnJlYWsKKysgICBkb25lCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfcmVzdHJpY3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY19yZXN0cmljdCIgPiY2OyB9CisrCisrIGNhc2UgJGFjX2N2X2NfcmVzdHJpY3QgaW4KKysgICByZXN0cmljdCkgOzsKKysgICBubykgJGFzX2VjaG8gIiNkZWZpbmUgcmVzdHJpY3QgLyoqLyIgPj5jb25mZGVmcy5oCisrIDs7CisrICAgKikgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIHJlc3RyaWN0ICRhY19jdl9jX3Jlc3RyaWN0CisgX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyA7OworKyBlc2FjCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyB2b2xhdGlsZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgdm9sYXRpbGUuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2Nfdm9sYXRpbGUrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CisrCisgaW50CisgbWFpbiAoKQorIHsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpICgoKCgkYWNfdHlwZSkgMSA8PCAoNjQgLSAyKSkgLSAxKSAqIDIgKyAxKQorLQkgICAgICAgICA8ICgkYWNfdHlwZSkgKCgoKCRhY190eXBlKSAxIDw8ICg2NCAtIDIpKSAtIDEpICogMiArIDIpKV07CistdGVzdF9hcnJheSBbMF0gPSAwCisgCisrdm9sYXRpbGUgaW50IHg7CisraW50ICogdm9sYXRpbGUgeSA9IChpbnQgKikgMDsKKytyZXR1cm4gIXggJiYgIXk7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIDoKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9jX3ZvbGF0aWxlPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgYWNfY3ZfY192b2xhdGlsZT1ubworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Nfdm9sYXRpbGUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY192b2xhdGlsZSIgPiY2OyB9CisraWYgdGVzdCAkYWNfY3ZfY192b2xhdGlsZSA9IG5vOyB0aGVuCisgCistCWNhc2UgJGFjX3R5cGUgaW4KKy0gIGludDY0X3QpIGFjX2N2X2NfaW50NjRfdD15ZXMgOzsKKy0gICopIGFjX2N2X2NfaW50NjRfdD0kYWNfdHlwZSA7OworLWVzYWMKKyskYXNfZWNobyAiI2RlZmluZSB2b2xhdGlsZSAvKiovIiA+PmNvbmZkZWZzLmgKKyAKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKyMKKysjIENoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisrIworKworKyMgSWYgdXNpbmcgR0NDIHNwZWNpZnkgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKKyAKKy1maQorK3Rlc3RfZ2NjX2ZsYWcoKSB7CisrICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisraW50IG1haW4oKSB7fQorK19BQ0VPRgorKyAgICAkQ0MgLWMgY29uZnRlc3QuYyAkQ0ZMQUdTICRAID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbAorKyAgICByZXQ9JD8KKysgICAgcm0gLWYgY29uZnRlc3QubworKyAgICByZXR1cm4gJHJldAorK30KKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgdGVzdCAiJGFjX2N2X2NfaW50NjRfdCIgIT0gbm8gJiYgYnJlYWsKKy0gICAgIGRvbmUKKytpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgOyB0aGVuCisrICAgIERFU0lSRURfQ0ZMQUdTPSItV2FsbCAtV21vc3QgLXBpcGUgLVduby10cmlncmFwaHMgLVduby1wYXJlbnRoZXNlcyAtZmV4Y2VwdGlvbnMgLXN0ZD1nbnU5OSAtbW1hY29zeC12ZXJzaW9uLW1pbj0xMC41IC1mY29uc3RhbnQtY2ZzdHJpbmdzIgorKworKyAgICBmb3IgZmxhZyBpbiAkREVTSVJFRF9DRkxBR1MgOyBkbworKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IGFjY2VwdHMgJHtmbGFnfSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSBhY2NlcHRzICR7ZmxhZ30uLi4gIiA+JjY7IH0KKysgICAgICAgIGlmIHRlc3RfZ2NjX2ZsYWcgJGZsYWcgOyB0aGVuCisrICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJGZsYWciCisrICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyskYXNfZWNobyAieWVzIiA+JjY7IH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKysgICAgICAgIGZpCisrICAgIGRvbmUKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW50NjRfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW50NjRfdCIgPiY2OyB9CistICBjYXNlICRhY19jdl9jX2ludDY0X3QgaW4gIygKKy0gIG5vfHllcykgOzsgIygKKy0gICopCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgaW50NjRfdCAkYWNfY3ZfY19pbnQ2NF90CistX0FDRU9GCistOzsKKy0gIGVzYWMKKysjIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29tcGlsZXIgc3VwcG9ydHMgYXRvbWljIGJ1aWx0LWlucworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNvbXBpbGVyIGF0b21pYyBidWlsdC1pbnMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGNoZWNraW5nIGZvciBjb21waWxlciBhdG9taWMgYnVpbHQtaW5zIiA+JjY7fQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtb2RlX3QiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1vZGVfdC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfbW9kZV90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIF9fc3luY19mZXRjaF9hbmRfYWRkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSB0YXJnZXQgc3VwcG9ydHMgX19zeW5jX2ZldGNoX2FuZF9hZGQuLi4gIiA+JjY7IH0KKytpZiAke2NmX2N2X2hhdmVfc3luY19mZXRjaF9hbmRfYWRkKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKworKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy10eXBlZGVmIG1vZGVfdCBhY19fdHlwZV9uZXdfOworKworKworKworIGludAorIG1haW4gKCkKKyB7CistaWYgKChhY19fdHlwZV9uZXdfICopIDApCistICByZXR1cm4gMDsKKy1pZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKy0gIHJldHVybiAwOworKworKwkJCQkJaW50IGZvbyA9IDA7CisrCQkJCQlyZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQoJmZvbywgMSk7CisrCisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2N2X3R5cGVfbW9kZV90PXllcworK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGNmX2N2X2hhdmVfc3luY19mZXRjaF9hbmRfYWRkPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlhY19jdl90eXBlX21vZGVfdD1ubworKyAgY2ZfY3ZfaGF2ZV9zeW5jX2ZldGNoX2FuZF9hZGQ9bm8KKyBmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tb2RlX3QiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX21vZGVfdCIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9tb2RlX3QgPSB5ZXM7IHRoZW4KKy0gIDoKKy1lbHNlCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjZl9jdl9oYXZlX3N5bmNfZmV0Y2hfYW5kX2FkZCIgPiY1CisrJGFzX2VjaG8gIiRjZl9jdl9oYXZlX3N5bmNfZmV0Y2hfYW5kX2FkZCIgPiY2OyB9CisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgbW9kZV90IGludAorLV9BQ0VPRgorK2lmIHRlc3QgIngke2NmX2N2X2hhdmVfc3luY19mZXRjaF9hbmRfYWRkfSIgIT0gInhubyI7IHRoZW4KKyAKKyskYXNfZWNobyAiI2RlZmluZSBIQVZFX19fU1lOQ19GRVRDSF9BTkRfQUREIDEiID4+Y29uZmRlZnMuaAorKworK2Vsc2UKKysJYXNfZm5fZXJyb3IgJD8gIlN1cHBvcnQgZm9yIF9fc3luY19mZXRjaF9hbmRfYWRkIGlzIHJlcXVpcmVkLiIgIiRMSU5FTk8iIDUKKyBmaQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvZmZfdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2ZmX3QuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl90eXBlX29mZl90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwLi4uICIgPiY2OyB9CisraWYgJHtjZl9jdl9oYXZlX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKworKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy10eXBlZGVmIG9mZl90IGFjX190eXBlX25ld187CisrCisrCisrCisgaW50CisgbWFpbiAoKQorIHsKKy1pZiAoKGFjX190eXBlX25ld18gKikgMCkKKy0gIHJldHVybiAwOworLWlmIChzaXplb2YgKGFjX190eXBlX25ld18pKQorLSAgcmV0dXJuIDA7CisrCisrCQkJCQlpbnQgZm9vOworKwkJCQkJcmV0dXJuIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJmZvbywgMCwgMSk7CisrCisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2N2X3R5cGVfb2ZmX3Q9eWVzCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgY2ZfY3ZfaGF2ZV9zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcD15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfY3ZfdHlwZV9vZmZfdD1ubworKyAgY2ZfY3ZfaGF2ZV9zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcD1ubworIGZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZl90IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9vZmZfdCA9IHllczsgdGhlbgorLSAgOgorLWVsc2UKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNmX2N2X2hhdmVfc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAiID4mNQorKyRhc19lY2hvICIkY2ZfY3ZfaGF2ZV9zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCIgPiY2OyB9CisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgb2ZmX3QgbG9uZyBpbnQKKy1fQUNFT0YKKytpZiB0ZXN0ICJ4JHtjZl9jdl9oYXZlX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwfSIgIT0gInhubyI7IHRoZW4KKyAKKyskYXNfZWNobyAiI2RlZmluZSBIQVZFX19fU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVAgMSIgPj5jb25mZGVmcy5oCisrCisrZWxzZQorKwlhc19mbl9lcnJvciAkPyAiU3VwcG9ydCBmb3IgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCBpcyByZXF1aXJlZC4iICIkTElORU5PIiA1CisgZmkKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGlkX3QiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBpZF90Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9waWRfdCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBfX3N5bmNfc3luY2hyb25pemUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBfX3N5bmNfc3luY2hyb25pemUuLi4gIiA+JjY7IH0KKytpZiAke2NmX2N2X2hhdmVfc3luY19zeW5jaHJvbml6ZSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysKKysJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistdHlwZWRlZiBwaWRfdCBhY19fdHlwZV9uZXdfOworKworKworKworIGludAorIG1haW4gKCkKKyB7CistaWYgKChhY19fdHlwZV9uZXdfICopIDApCistICByZXR1cm4gMDsKKy1pZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKy0gIHJldHVybiAwOworKworKwkJCQkJX19zeW5jX3N5bmNocm9uaXplKCk7CisrCisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2N2X3R5cGVfcGlkX3Q9eWVzCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgY2ZfY3ZfaGF2ZV9zeW5jX3N5bmNocm9uaXplPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgY2ZfY3ZfaGF2ZV9zeW5jX3N5bmNocm9uaXplPW5vCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKy0JYWNfY3ZfdHlwZV9waWRfdD1ubworIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjZl9jdl9oYXZlX3N5bmNfc3luY2hyb25pemUiID4mNQorKyRhc19lY2hvICIkY2ZfY3ZfaGF2ZV9zeW5jX3N5bmNocm9uaXplIiA+JjY7IH0KKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytpZiB0ZXN0ICJ4JHtjZl9jdl9oYXZlX3N5bmNfc3luY2hyb25pemV9IiAhPSAieG5vIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfX19TWU5DX1NZTkNIUk9OSVpFIDEiID4+Y29uZmRlZnMuaAorKworK2Vsc2UKKysJYXNfZm5fZXJyb3IgJD8gIlN1cHBvcnQgZm9yIF9fc3luY19zeW5jaHJvbml6ZSBpcyByZXF1aXJlZC4iICIkTElORU5PIiA1CisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3BpZF90IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9waWRfdCA9IHllczsgdGhlbgorLSAgOgorKworKyMKKysjIENoZWNrIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBidWlsZCB0aGUgcGFja2FnZSB3aXRoIGRlYnVnIGFuZCBwcm9maWxlCisrIyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeQorKyMKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGxpYnJhcnkgYnVpbGQgb3B0aW9ucyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogY2hlY2tpbmcgbGlicmFyeSBidWlsZCBvcHRpb25zIiA+JjY7fQorKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBhIGRlYnVnIGxpYnJhcnkgaW5zdGFuY2UiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYSBkZWJ1ZyBsaWJyYXJ5IGluc3RhbmNlLi4uICIgPiY2OyB9CisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1ZzsgYnVpbGRfZGVidWc9JHtlbmFibGV2YWx9CisgZWxzZQorKyAgYnVpbGRfZGVidWc9eWVzCisrZmkKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtidWlsZF9kZWJ1Z30iID4mNQorKyRhc19lY2hvICIke2J1aWxkX2RlYnVnfSIgPiY2OyB9CisrIGlmIHRlc3QgIngke2J1aWxkX2RlYnVnfSIgPSAieHllcyI7IHRoZW4KKysgIENGX0JVSUxEX0RFQlVHX1RSVUU9CisrICBDRl9CVUlMRF9ERUJVR19GQUxTRT0nIycKKytlbHNlCisrICBDRl9CVUlMRF9ERUJVR19UUlVFPScjJworKyAgQ0ZfQlVJTERfREVCVUdfRkFMU0U9CisrZmkKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBwaWRfdCBpbnQKKy1fQUNFT0YKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYSBwcm9maWxlIGxpYnJhcnkgaW5zdGFuY2UiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYSBwcm9maWxlIGxpYnJhcnkgaW5zdGFuY2UuLi4gIiA+JjY7IH0KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHJvZmlsZSB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcHJvZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wcm9maWxlOyBidWlsZF9wcm9maWxlPSR7ZW5hYmxldmFsfQorK2Vsc2UKKysgIGJ1aWxkX3Byb2ZpbGU9eWVzCisgZmkKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2l6ZV90IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaXplX3QuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl90eXBlX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtidWlsZF9wcm9maWxlfSIgPiY1CisrJGFzX2VjaG8gIiR7YnVpbGRfcHJvZmlsZX0iID4mNjsgfQorKyBpZiB0ZXN0ICJ4JHtidWlsZF9wcm9maWxlfSIgPSAieHllcyI7IHRoZW4KKysgIENGX0JVSUxEX1BST0ZJTEVfVFJVRT0KKysgIENGX0JVSUxEX1BST0ZJTEVfRkFMU0U9JyMnCisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLXR5cGVkZWYgc2l6ZV90IGFjX190eXBlX25ld187CistaW50CistbWFpbiAoKQorLXsKKy1pZiAoKGFjX190eXBlX25ld18gKikgMCkKKy0gIHJldHVybiAwOworLWlmIChzaXplb2YgKGFjX190eXBlX25ld18pKQorLSAgcmV0dXJuIDA7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKysgIENGX0JVSUxEX1BST0ZJTEVfVFJVRT0nIycKKysgIENGX0JVSUxEX1BST0ZJTEVfRkFMU0U9CisrZmkKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgdGVzdHMgYW5kIGV4YW1wbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHRlc3RzIGFuZCBleGFtcGxlcy4uLiAiID4mNjsgfQorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfdGVzdHM7IGJ1aWxkX3Rlc3RzPSR7ZW5hYmxldmFsfQorK2Vsc2UKKysgIGJ1aWxkX3Rlc3RzPXllcworK2ZpCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7YnVpbGRfdGVzdHN9IiA+JjUKKyskYXNfZWNobyAiJHtidWlsZF90ZXN0c30iID4mNjsgfQorKyBpZiB0ZXN0ICJ4JHtidWlsZF90ZXN0c30iID0gInh5ZXMiOyB0aGVuCisrICBDRl9CVUlMRF9URVNUU19UUlVFPQorKyAgQ0ZfQlVJTERfVEVTVFNfRkFMU0U9JyMnCisrZWxzZQorKyAgQ0ZfQlVJTERfVEVTVFNfVFJVRT0nIycKKysgIENGX0JVSUxEX1RFU1RTX0ZBTFNFPQorK2ZpCisrCisrCisrIworKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMKKysjCisrIyBXZSBleHBlY3QgdGhhdCB3ZSdsbCBuZWVkIGF0IG1pbmltdW06CisrIworKyMgICAqIGRsCisrIyAgICogaWN1aTE4bgorKyMgICAqIG0KKysjICAgKiBwdGhyZWFkCisrIyAgICogdXVpZAorKyMKKysjIGFuZCwgbWF5YmU6CisrIworKyMgICAqIHJ0CisrIworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcmVxdWlyZWQgcGFja2FnZSBkZXBlbmRlbmNpZXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGNoZWNraW5nIHJlcXVpcmVkIHBhY2thZ2UgZGVwZW5kZW5jaWVzIiA+JjY7fQorKworKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRQS0dfQ09ORklHIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKysgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorKyAgOzsKKysgICopCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgOzsKKyBlc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGFjX2N2X3R5cGVfc2l6ZV90PXllcworK2ZpCisrUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCisraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorKyRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWFjX2N2X3R5cGVfc2l6ZV90PW5vCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2l6ZV90IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X3R5cGVfc2l6ZV90ID0geWVzOyB0aGVuCistICA6CistZWxzZQorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQKKy1fQUNFT0YKKyAKKy1maQorKyMKKysjIFNvcnQgb3V0IHdoZXJlIHRoZSBJQ1UgY29tcG9uZW50cyBhcmUgYXQuCisrIworIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzc2l6ZV90IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzc2l6ZV90Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zc2l6ZV90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSAoSUNVKSBwYWNrYWdlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBjaGVja2luZyB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIChJQ1UpIHBhY2thZ2UiID4mNjt9CisrCisrIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJpY3UtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgaWN1LWNvbmZpZzsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3BhdGhfSUNVX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy10eXBlZGVmIHNzaXplX3QgYWNfX3R5cGVfbmV3XzsKKy1pbnQKKy1tYWluICgpCisteworLWlmICgoYWNfX3R5cGVfbmV3XyAqKSAwKQorLSAgcmV0dXJuIDA7CistaWYgKHNpemVvZiAoYWNfX3R5cGVfbmV3XykpCistICByZXR1cm4gMDsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworKyAgY2FzZSAkSUNVX0NPTkZJRyBpbgorKyAgW1xcL10qIHwgPzpbXFwvXSopCisrICBhY19jdl9wYXRoX0lDVV9DT05GSUc9IiRJQ1VfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKysgIDs7CisrICAqKQorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgIGFjX2N2X3BhdGhfSUNVX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIDs7CisgZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl90eXBlX3NzaXplX3Q9eWVzCisrZmkKKytJQ1VfQ09ORklHPSRhY19jdl9wYXRoX0lDVV9DT05GSUcKKytpZiB0ZXN0IC1uICIkSUNVX0NPTkZJRyI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSUNVX0NPTkZJRyIgPiY1CisrJGFzX2VjaG8gIiRJQ1VfQ09ORklHIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfY3ZfdHlwZV9zc2l6ZV90PW5vCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc3NpemVfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc3NpemVfdCIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9zc2l6ZV90ID0geWVzOyB0aGVuCistICA6CistZWxzZQorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIHNzaXplX3QgaW50CistX0FDRU9GCisgCistZmkKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpZF90IGluIHN5cy90eXBlcy5oLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aWRfdCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWljdSB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2ljdStzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2ljdTsKKysJCWlmIHRlc3QgIngke3dpdGh2YWx9IiA9ICJ4bm8iOyB0aGVuCisrCQkJYXNfZm5fZXJyb3IgJD8gIiR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIChJQ1UpIHBhY2thZ2UiICIkTElORU5PIiA1CisrCQllbHNlCisrCQkJaWN1X2Rpcj0ke3dpdGh2YWx9CisrCQlmaQorKworIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyAgaWN1X2Rpcj0KKytmaQorIAorLV9BQ0VPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAidWlkX3QiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgYWNfY3ZfdHlwZV91aWRfdD15ZXMKKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWljdS1pbmNsdWRlcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2ljdV9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2ljdV9pbmNsdWRlczsgaWN1X2hlYWRlcl9kaXI9JHt3aXRodmFsfQorIGVsc2UKKy0gIGFjX2N2X3R5cGVfdWlkX3Q9bm8KKysgIGljdV9oZWFkZXJfZGlyPQorIGZpCistcm0gLWYgY29uZnRlc3QqCisgCisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pY3UtbGlicyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2ljdV9saWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfaWN1X2xpYnM7IGljdV9saWJyYXJ5X2Rpcj0ke3dpdGh2YWx9CisrZWxzZQorKyAgaWN1X2xpYnJhcnlfZGlyPQorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aWRfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWlkX3QiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWlkX3QgPSBubzsgdGhlbgorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSB1aWRfdCBpbnQKKy1fQUNFT0YKKyAKKysjIFdlIGFsd2F5cyBwcmVmZXIgY2hlY2tpbmcgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyAnLS13aXRoLWljdS0uLi4nCisrIyBvcHRpb25zIGZpcnN0IHRvIHVzaW5nIGljdS1jb25maWcgYmVjYXVzZSB0aGUgZm9ybWVyIG1pZ2h0IGJlIHVzZWQKKysjIGluIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQgb24gYSBzeXN0ZW0gdGhhdCBhbHNvIGNvbnRhaW5zCisrIyBpY3UtY29uZmlnLiBJbiBzdWNoIGEgY2FzZSwgdGhlIHVzZXIgd2FudHMgd2hhdCBoZS9zaGUgc3BlY2lmaWVkCisrIyByYXRoZXIgdGhhbiB3aGF0IGljdS1jb25maWcgaW5kaWNhdGVzLgorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBnaWRfdCBpbnQKKy1fQUNFT0YKKytpZiB0ZXN0ICJ4JHtpY3VfZGlyfSIgIT0gIngiIC1vICJ4JHtpY3VfaGVhZGVyX2Rpcn0iICE9ICJ4IiAtbyAieCR7aWN1X2xpYnJhcnlfZGlyfSIgIT0gIngiOyB0aGVuCisrCWlmIHRlc3QgIngke2ljdV9kaXJ9IiAhPSAieCI7IHRoZW4KKysJCWlmIHRlc3QgLWQgIiR7aWN1X2Rpcn0iOyB0aGVuCisrCQkJaWYgdGVzdCAtZCAiJHtpY3VfZGlyfS9pbmNsdWRlIjsgdGhlbgorKwkJCQlJQ1VfQ1BQRkxBR1M9Ii1JJHtpY3VfZGlyfS9pbmNsdWRlIgorKwkJCWVsc2UKKysJCQkJSUNVX0NQUEZMQUdTPSItSSR7aWN1X2Rpcn0iCisrCQkJZmkKKyAKKy1maQorKwkJCWlmIHRlc3QgLWQgIiR7aWN1X2Rpcn0vbGliIjsgdGhlbgorKwkJCQlJQ1VfTERGTEFHUz0iLUwke2ljdV9kaXJ9L2xpYiIKKysJCQllbHNlCisrCQkJCUlDVV9MREZMQUdTPSItTCR7aWN1X2Rpcn0iCisrCQkJZmkKKysJCWVsc2UKKysJCQlhc19mbl9lcnJvciAkPyAiTm8gc3VjaCBkaXJlY3RvcnkgJHtpY3VfZGlyfSIgIiRMSU5FTk8iIDUKKysJCWZpCisrCWZpCisgCisrCWlmIHRlc3QgIngke2ljdV9oZWFkZXJfZGlyfSIgIT0gIngiOyB0aGVuCisrCQlpZiB0ZXN0IC1kICIke2ljdV9oZWFkZXJfZGlyfSI7IHRoZW4KKysJCQlJQ1VfQ1BQRkxBR1M9Ii1JJHtpY3VfaGVhZGVyX2Rpcn0iCisrCQllbHNlCisrCQkJYXNfZm5fZXJyb3IgJD8gIk5vIHN1Y2ggZGlyZWN0b3J5ICR7aWN1X2hlYWRlcl9kaXJ9IiAiJExJTkVOTyIgNQorKwkJZmkKKysJZmkKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50OF90IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50OF90Li4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY191aW50OF90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2N2X2NfdWludDhfdD1ubworLSAgICAgZm9yIGFjX3R5cGUgaW4gJ3VpbnQ4X3QnICd1bnNpZ25lZCBpbnQnICd1bnNpZ25lZCBsb25nIGludCcgXAorLQkgJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnICd1bnNpZ25lZCBzaG9ydCBpbnQnICd1bnNpZ25lZCBjaGFyJzsgZG8KKy0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLWludAorLW1haW4gKCkKKy17Cistc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCRhY190eXBlKSAtMSA+PiAoOCAtIDEpID09IDEpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKysJaWYgdGVzdCAieCR7aWN1X2xpYnJhcnlfZGlyfSIgIT0gIngiOyB0aGVuCisrCQlpZiB0ZXN0IC1kICIke2ljdV9saWJyYXJ5X2Rpcn0iOyB0aGVuCisrCQkJSUNVX0xERkxBR1M9Ii1MJHtpY3VfbGlicmFyeV9kaXJ9IgorKwkJZWxzZQorKwkJCWFzX2ZuX2Vycm9yICQ/ICJObyBzdWNoIGRpcmVjdG9yeSAke2ljdV9saWJyYXJ5X2Rpcn0iICIkTElORU5PIiA1CisrCQlmaQorKwlmaQorIAorLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBjYXNlICRhY190eXBlIGluCistICB1aW50OF90KSBhY19jdl9jX3VpbnQ4X3Q9eWVzIDs7CistICAqKSBhY19jdl9jX3VpbnQ4X3Q9JGFjX3R5cGUgOzsKKy1lc2FjCisrCSMgTW9zdCBJQ1UgbGlicmFyaWVzIGhhdmUgdmVyc2lvbmVkIHN5bWJvbHMKKysJIyAoZS5nLiB1Y2FsX29wZW5fM184KSwgc28gdGhlIHN0b2NrIEFDX0NIRUNLX0xJQiB3aWxsIG5vdAorKwkjIHdvcmsgaGVyZSBnaXZlbiB0aGUgd2F5IGl0IGNoZWNrcyBmb3Igc3ltYm9sCisrCSMgYXZhaWxhYmlsaXR5LiBQdW50IGFuZCBhc3N1bWUgdGhlIGxpYnJhcnkgc2V0IG5vcm1hbGx5CisrCSMgcmVwb3J0ZWQgYnkgaWN1LWNvbmZpZy4KKyAKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysJSUNVX0xJQlM9IiR7SUNVX0xERkxBR1N9IC1saWN1aTE4biAtbGljdXVjIC1saWN1ZGF0YSIKKyAKKytlbGlmIHRlc3QgIngke0lDVV9DT05GSUd9IiAhPSAieCI7IHRoZW4KKysJSUNVX0NQUEZMQUdTPSJgJHtJQ1VfQ09ORklHfSAtLWNwcGZsYWdzYCIKKysJSUNVX0xERkxBR1M9ImAke0lDVV9DT05GSUd9IC0tbGRmbGFnc2AiCisrCUlDVV9MSUJTPSJgJHtJQ1VfQ09ORklHfSAtLWxkZmxhZ3MtbGlic29ubHlgIgorIAorLWZpCisrZWxpZiB0ZXN0ICJ4JHtQS0dfQ09ORklHfSIgIT0gIngiIC1hICIke1BLR19DT05GSUd9IC0tZXhpc3RzIGljdSI7IHRoZW4KKysJSUNVX0NQUEZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWNmbGFncyBpY3VgIgorKwlJQ1VfTERGTEFHUz0iYCR7UEtHX0NPTkZJR30gLS1saWJzLW9ubHktTCBpY3VgIgorKwlJQ1VfTElCUz0iYCR7UEtHX0NPTkZJR30gLS1saWJzLW9ubHktbCBpY3VgIgorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICB0ZXN0ICIkYWNfY3ZfY191aW50OF90IiAhPSBubyAmJiBicmVhaworLSAgICAgZG9uZQorK2Vsc2UKKysJYXNfZm5fZXJyb3IgJD8gIkNhbm5vdCBmaW5kIHRoZSBJbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIFVuaWNvZGUgKElDVSkgcGFja2FnZS4iICIkTElORU5PIiA1CisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX3VpbnQ4X3QiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX3VpbnQ4X3QiID4mNjsgfQorLSAgY2FzZSAkYWNfY3ZfY191aW50OF90IGluICMoCistICBub3x5ZXMpIDs7ICMoCistICAqKQorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBfVUlOVDhfVCAxCistX0FDRU9GCisgCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgdWludDhfdCAkYWNfY3ZfY191aW50OF90CistX0FDRU9GCistOzsKKy0gIGVzYWMKKyAKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MTZfdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDE2X3QuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9jX3VpbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2N2X2NfdWludDE2X3Q9bm8KKy0gICAgIGZvciBhY190eXBlIGluICd1aW50MTZfdCcgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCistCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistaW50CistbWFpbiAoKQorLXsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpIC0xID4+ICgxNiAtIDEpID09IDEpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKytDUFBGTEFHUz0iJHtJQ1VfQ1BQRkxBR1N9ICR7Q1BQRkxBR1N9IgorK0xERkxBR1M9IiR7SUNVX0xERkxBR1N9ICR7TERGTEFHU30iCisrTElCUz0iJHtJQ1VfTElCU30gJHtMSUJTfSIKKyAKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytmb3IgYWNfaGVhZGVyIGluIHVuaWNvZGUvcHV0aWwuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ1bmljb2RlL3B1dGlsLmgiICJhY19jdl9oZWFkZXJfdW5pY29kZV9wdXRpbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdW5pY29kZV9wdXRpbF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9VTklDT0RFX1BVVElMX0ggMQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBjYXNlICRhY190eXBlIGluCistICB1aW50MTZfdCkgYWNfY3ZfY191aW50MTZfdD15ZXMgOzsKKy0gICopIGFjX2N2X2NfdWludDE2X3Q9JGFjX3R5cGUgOzsKKy1lc2FjCistCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCisgCisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgdGVzdCAiJGFjX2N2X2NfdWludDE2X3QiICE9IG5vICYmIGJyZWFrCistICAgICBkb25lCistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX3VpbnQxNl90IiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY191aW50MTZfdCIgPiY2OyB9CistICBjYXNlICRhY19jdl9jX3VpbnQxNl90IGluICMoCistICBub3x5ZXMpIDs7ICMoCistICAqKQorLQorK2RvbmUKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSB1aW50MTZfdCAkYWNfY3ZfY191aW50MTZfdAorK2ZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91Y2FsLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91Y2FsLmgiICJhY19jdl9oZWFkZXJfdW5pY29kZV91Y2FsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmljb2RlX3VjYWxfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VQ0FMX0ggMQorIF9BQ0VPRgorLTs7CistICBlc2FjCisgCisrZmkKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MzJfdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDMyX3QuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9jX3VpbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2N2X2NfdWludDMyX3Q9bm8KKy0gICAgIGZvciBhY190eXBlIGluICd1aW50MzJfdCcgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCistCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistaW50CistbWFpbiAoKQorLXsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpIC0xID4+ICgzMiAtIDEpID09IDEpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKytkb25lCisgCistICA7CistICByZXR1cm4gMDsKKy19CisrZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vjb2wuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ1bmljb2RlL3Vjb2wuaCIgImFjX2N2X2hlYWRlcl91bmljb2RlX3Vjb2xfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWNvbF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9VTklDT0RFX1VDT0xfSCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKy0gIGNhc2UgJGFjX3R5cGUgaW4KKy0gIHVpbnQzMl90KSBhY19jdl9jX3VpbnQzMl90PXllcyA7OworLSAgKikgYWNfY3ZfY191aW50MzJfdD0kYWNfdHlwZSA7OworLWVzYWMKKyAKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKytmaQorIAorK2RvbmUKKyAKKy1maQorK2ZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91Y3Vyci5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInVuaWNvZGUvdWN1cnIuaCIgImFjX2N2X2hlYWRlcl91bmljb2RlX3VjdXJyX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmljb2RlX3VjdXJyX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1VOSUNPREVfVUNVUlJfSCAxCisrX0FDRU9GCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgIHRlc3QgIiRhY19jdl9jX3VpbnQzMl90IiAhPSBubyAmJiBicmVhaworLSAgICAgZG9uZQorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY191aW50MzJfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfdWludDMyX3QiID4mNjsgfQorLSAgY2FzZSAkYWNfY3ZfY191aW50MzJfdCBpbiAjKAorLSAgbm98eWVzKSA7OyAjKAorLSAgKikKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgX1VJTlQzMl9UIDEKKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3VjdXJyLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91Y3Vyci5oIiAiYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWN1cnJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWN1cnJfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VQ1VSUl9IIDEKKyBfQUNFT0YKKyAKKytmaQorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIHVpbnQzMl90ICRhY19jdl9jX3VpbnQzMl90CisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91ZGF0LmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91ZGF0LmgiICJhY19jdl9oZWFkZXJfdW5pY29kZV91ZGF0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmljb2RlX3VkYXRfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VREFUX0ggMQorIF9BQ0VPRgorLTs7CistICBlc2FjCisgCisrZmkKKyAKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50NjRfdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDY0X3QuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9jX3VpbnQ2NF90K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGFjX2N2X2NfdWludDY0X3Q9bm8KKy0gICAgIGZvciBhY190eXBlIGluICd1aW50NjRfdCcgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCistCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistaW50CistbWFpbiAoKQorLXsKKy1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJGFjX3R5cGUpIC0xID4+ICg2NCAtIDEpID09IDEpXTsKKy10ZXN0X2FycmF5IFswXSA9IDAKKytkb25lCisgCistICA7CistICByZXR1cm4gMDsKKy19CisrZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vsb2NkYXRhLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91bG9jZGF0YS5oIiAiYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWxvY2RhdGFfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWxvY2RhdGFfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VTE9DREFUQV9IIDEKKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgY2FzZSAkYWNfdHlwZSBpbgorLSAgdWludDY0X3QpIGFjX2N2X2NfdWludDY0X3Q9eWVzIDs7CistICAqKSBhY19jdl9jX3VpbnQ2NF90PSRhY190eXBlIDs7CistZXNhYworIAorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorK2ZpCisgCisrZG9uZQorIAorLWZpCisrZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vsb2MuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ1bmljb2RlL3Vsb2MuaCIgImFjX2N2X2hlYWRlcl91bmljb2RlX3Vsb2NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWxvY19oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9VTklDT0RFX1VMT0NfSCAxCisrX0FDRU9GCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgIHRlc3QgIiRhY19jdl9jX3VpbnQ2NF90IiAhPSBubyAmJiBicmVhaworLSAgICAgZG9uZQorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY191aW50NjRfdCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfdWludDY0X3QiID4mNjsgfQorLSAgY2FzZSAkYWNfY3ZfY191aW50NjRfdCBpbiAjKAorLSAgbm98eWVzKSA7OyAjKAorLSAgKikKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgX1VJTlQ2NF9UIDEKKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiB1bmljb2RlL3Vsb2MuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ1bmljb2RlL3Vsb2MuaCIgImFjX2N2X2hlYWRlcl91bmljb2RlX3Vsb2NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaWNvZGVfdWxvY19oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9VTklDT0RFX1VMT0NfSCAxCisgX0FDRU9GCisgCisrZmkKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSB1aW50NjRfdCAkYWNfY3ZfY191aW50NjRfdAorLV9BQ0VPRgorLTs7CistICBlc2FjCisrZG9uZQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHRtIGlzIGluIHN5cy90aW1lLmggb3IgdGltZS5oIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHRtIGlzIGluIHN5cy90aW1lLmggb3IgdGltZS5oLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3Zfc3RydWN0X3RtK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2ZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91bXNnLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91bXNnLmgiICJhY19jdl9oZWFkZXJfdW5pY29kZV91bXNnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmljb2RlX3Vtc2dfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VTVNHX0ggMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDx0aW1lLmg+CisgCistaW50CistbWFpbiAoKQorLXsKKy1zdHJ1Y3QgdG0gdG07CistCQkJCSAgICAgaW50ICpwID0gJnRtLnRtX3NlYzsKKy0gCQkJCSAgICAgcmV0dXJuICFwOworLSAgOworLSAgcmV0dXJuIDA7CistfQorK2ZpCisrCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91bnVtLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91bnVtLmgiICJhY19jdl9oZWFkZXJfdW5pY29kZV91bnVtX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmljb2RlX3VudW1faCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VTlVNX0ggMQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl9zdHJ1Y3RfdG09dGltZS5oCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWFjX2N2X3N0cnVjdF90bT1zeXMvdGltZS5oCisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0cnVjdF90bSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0cnVjdF90bSIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3Zfc3RydWN0X3RtID0gc3lzL3RpbWUuaDsgdGhlbgorK2RvbmUKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgVE1fSU5fU1lTX1RJTUUgMQorK2ZvciBhY19oZWFkZXIgaW4gdW5pY29kZS91c2V0LmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pY29kZS91c2V0LmgiICJhY19jdl9oZWFkZXJfdW5pY29kZV91c2V0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmljb2RlX3VzZXRfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JQ09ERV9VU0VUX0ggMQorIF9BQ0VPRgorIAorIGZpCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCB0bS50bV96b25lIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdG0udG1fem9uZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8JGFjX2N2X3N0cnVjdF90bT4KKytkb25lCisgCisgCistaW50CistbWFpbiAoKQorLXsKKy1zdGF0aWMgc3RydWN0IHRtIGFjX2FnZ3I7CistaWYgKGFjX2FnZ3IudG1fem9uZSkKKy1yZXR1cm4gMDsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV96b25lPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyMKKysjIFNvcnQgb3V0IHdoZXJlIHRoZSBVVUlEIGNvbXBvbmVudHMgYXJlIGF0LgorKyMKKyAKKy0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPCRhY19jdl9zdHJ1Y3RfdG0+CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgcGFja2FnZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogY2hlY2tpbmcgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIHBhY2thZ2UiID4mNjt9CisgCisrIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ1dWlkLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IHV1aWQtY29uZmlnOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfcGF0aF9VVUlEX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJFVVSURfQ09ORklHIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKysgIGFjX2N2X3BhdGhfVVVJRF9DT05GSUc9IiRVVUlEX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrICA7OworKyAgKikKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wYXRoX1VVSURfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLWludAorLW1haW4gKCkKKy17Cistc3RhdGljIHN0cnVjdCB0bSBhY19hZ2dyOworLWlmIChzaXplb2YgYWNfYWdnci50bV96b25lKQorLXJldHVybiAwOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrICA7OworIGVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV96b25lPXllcworK2ZpCisrVVVJRF9DT05GSUc9JGFjX2N2X3BhdGhfVVVJRF9DT05GSUcKKytpZiB0ZXN0IC1uICIkVVVJRF9DT05GSUciOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVVSURfQ09ORklHIiA+JjUKKyskYXNfZWNobyAiJFVVSURfQ09ORklHIiA+JjY7IH0KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworKworKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdXVpZCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX3V1aWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF91dWlkOworKwkJaWYgdGVzdCAieCR7d2l0aHZhbH0iID0gInhubyI7IHRoZW4KKysJCQlhc19mbl9lcnJvciAkPyAiJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzIHRoZSBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgcGFja2FnZSIgIiRMSU5FTk8iIDUKKysJCWZpCisrCQl1dWlkX2Rpcj0ke3dpdGh2YWx9CisgCistCWFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZT1ubworK2Vsc2UKKysgIHV1aWRfZGlyPQorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC11dWlkLWluY2x1ZGVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfdXVpZF9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX3V1aWRfaW5jbHVkZXM7IHV1aWRfaGVhZGVyX2Rpcj0ke3dpdGh2YWx9CisrZWxzZQorKyAgdXVpZF9oZWFkZXJfZGlyPQorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC11dWlkLWxpYnMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF91dWlkX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF91dWlkX2xpYnM7IHV1aWRfbGlicmFyeV9kaXI9JHt3aXRodmFsfQorK2Vsc2UKKysgIHV1aWRfbGlicmFyeV9kaXI9CisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZSA9IHllczsgdGhlbgorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUgMQorLV9BQ0VPRgorIAorKyMgV2UgYWx3YXlzIHByZWZlciBjaGVja2luZyB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpb3VzICctLXdpdGgtdXVpZC0uLi4nCisrIyBvcHRpb25zIGZpcnN0IHRvIHVzaW5nIHV1aWQtY29uZmlnIGJlY2F1c2UgdGhlIGZvcm1lciBtaWdodCBiZSB1c2VkCisrIyBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50IG9uIGEgc3lzdGVtIHRoYXQgYWxzbyBjb250YWlucworKyMgdXVpZC1jb25maWcuIEluIHN1Y2ggYSBjYXNlLCB0aGUgdXNlciB3YW50cyB3aGF0IGhlL3NoZSBzcGVjaWZpZWQKKysjIHJhdGhlciB0aGFuIHdoYXQgdXVpZC1jb25maWcgaW5kaWNhdGVzLgorIAorLWZpCisraWYgdGVzdCAieCR7dXVpZF9kaXJ9IiAhPSAieCIgLW8gIngke3V1aWRfaGVhZGVyX2Rpcn0iICE9ICJ4IiAtbyAieCR7dXVpZF9saWJyYXJ5X2Rpcn0iICE9ICJ4IjsgdGhlbgorKwlpZiB0ZXN0ICJ4JHt1dWlkX2Rpcn0iICE9ICJ4IjsgdGhlbgorKwkJaWYgdGVzdCAtZCAiJHt1dWlkX2Rpcn0iOyB0aGVuCisrCQkJaWYgdGVzdCAtZCAiJHt1dWlkX2Rpcn0vaW5jbHVkZSI7IHRoZW4KKysJCQkJVVVJRF9DUFBGTEFHUz0iLUkke3V1aWRfZGlyfS9pbmNsdWRlIgorKwkJCWVsc2UKKysJCQkJVVVJRF9DUFBGTEFHUz0iLUkke3V1aWRfZGlyfSIKKysJCQlmaQorIAorLWlmIHRlc3QgIiRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geWVzOyB0aGVuCisrCQkJaWYgdGVzdCAtZCAiJHt1dWlkX2Rpcn0vbGliIjsgdGhlbgorKwkJCQlVVUlEX0xERkxBR1M9Ii1MJHt1dWlkX2Rpcn0vbGliIC1sdXVpZCIKKysJCQllbHNlCisrCQkJCVVVSURfTERGTEFHUz0iLUwke3V1aWRfZGlyfSAtbHV1aWQiCisrCQkJZmkKKysJCWVsc2UKKysJCQlhc19mbl9lcnJvciAkPyAiTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2Rpcn0iICIkTElORU5PIiA1CisrCQlmaQorKwlmaQorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBIQVZFX1RNX1pPTkUgMQorLV9BQ0VPRgorKwlpZiB0ZXN0ICJ4JHt1dWlkX2hlYWRlcl9kaXJ9IiAhPSAieCI7IHRoZW4KKysJCWlmIHRlc3QgLWQgIiR7dXVpZF9oZWFkZXJfZGlyfSI7IHRoZW4KKysJCQlVVUlEX0NQUEZMQUdTPSItSSR7dXVpZF9oZWFkZXJfZGlyfSIKKysJCWVsc2UKKysJCQlhc19mbl9lcnJvciAkPyAiTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2hlYWRlcl9kaXJ9IiAiJExJTkVOTyIgNQorKwkJZmkKKysJZmkKKyAKKysJaWYgdGVzdCAieCR7dXVpZF9saWJyYXJ5X2Rpcn0iICE9ICJ4IjsgdGhlbgorKwkJaWYgdGVzdCAtZCAiJHt1dWlkX2xpYnJhcnlfZGlyfSI7IHRoZW4KKysJCQlVVUlEX0xERkxBR1M9Ii1MJHt1dWlkX2xpYnJhcnlfZGlyfSIKKysJCWVsc2UKKysJCQlhc19mbl9lcnJvciAkPyAiTm8gc3VjaCBkaXJlY3RvcnkgJHt1dWlkX2xpYnJhcnlfZGlyfSIgIiRMSU5FTk8iIDUKKysJCWZpCisrCWZpCisrCisrCVVVSURfc2F2ZWRfbGlicz0iJHtMSUJTfSIKKysJTElCUz0iIgorKworKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdXVpZF9jb21wYXJlIGluIC1sdXVpZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHV1aWRfY29tcGFyZSBpbiAtbHV1aWQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2xpYl91dWlkX3V1aWRfY29tcGFyZSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdHpuYW1lIGlzIGRlY2xhcmVkIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdHpuYW1lIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisrTElCUz0iLWx1dWlkICAkTElCUyIKKytjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDx0aW1lLmg+CisgCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisrI2VuZGlmCisrY2hhciB1dWlkX2NvbXBhcmUgKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy0jaWZuZGVmIHR6bmFtZQorLSAgKHZvaWQpIHR6bmFtZTsKKy0jZW5kaWYKKy0KKytyZXR1cm4gdXVpZF9jb21wYXJlICgpOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19jdl9oYXZlX2RlY2xfdHpuYW1lPXllcworK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2xpYl91dWlkX3V1aWRfY29tcGFyZT15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZT1ubworKyAgYWNfY3ZfbGliX3V1aWRfdXVpZF9jb21wYXJlPW5vCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl91dWlkX3V1aWRfY29tcGFyZSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9saWJfdXVpZF91dWlkX2NvbXBhcmUiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfbGliX3V1aWRfdXVpZF9jb21wYXJlIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9MSUJVVUlEIDEKKytfQUNFT0YKKysKKysgIExJQlM9Ii1sdXVpZCAkTElCUyIKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF90em5hbWUiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfdHpuYW1lIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfdHpuYW1lID0geWVzOyB0aGVuCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgSEFWRV9ERUNMX1RaTkFNRSAxCistX0FDRU9GCisgCisrCVVVSURfTElCUz0iJHtVVUlEX0xERkxBR1N9ICR7TElCU30iCisrCUxJQlM9IiR7VVVJRF9zYXZlZF9saWJzfSIKKysJdW5zZXQgVVVJRF9zYXZlZF9saWJzCisgCistZWxzZQorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgSEFWRV9ERUNMX1RaTkFNRSAwCistX0FDRU9GCisrZWxpZiB0ZXN0ICJ4JHtVVUlEX0NPTkZJR30iICE9ICJ4IjsgdGhlbgorKwlVVUlEX0NQUEZMQUdTPSJgJHtVVUlEX0NPTkZJR30gLS1jZmxhZ3NgIgorKwlVVUlEX0xERkxBR1M9ImAke1VVSURfQ09ORklHfSAtLWxkZmxhZ3NgIgorKwlVVUlEX0xJQlM9ImAke1VVSURfQ09ORklHfSAtLWxpYnNgIgorIAorK2VsaWYgdGVzdCAieCR7UEtHX0NPTkZJR30iICE9ICJ4IiAtYSAiJHtQS0dfQ09ORklHfSAtLWV4aXN0cyB1dWlkIjsgdGhlbgorKwlVVUlEX0NQUEZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWNmbGFncyB1dWlkYCIKKysJVVVJRF9MREZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWxpYnMtb25seS1MIHV1aWRgIgorKwlVVUlEX0xJQlM9ImAke1BLR19DT05GSUd9IC0tbGlicy1vbmx5LWwgdXVpZGAiCisgCisrZWxzZQorKwlhc19mbl9lcnJvciAkPyAiQ2Fubm90IGZpbmQgdGhlIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSBwYWNrYWdlLiIgIiRMSU5FTk8iIDUKKyBmaQorIAorIAorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6bmFtZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdHpuYW1lLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfdmFyX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDx0aW1lLmg+CistI2lmICFIQVZFX0RFQ0xfVFpOQU1FCistZXh0ZXJuIGNoYXIgKnR6bmFtZVtdOworLSNlbmRpZgorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuIHR6bmFtZVswXVswXTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgYWNfY3ZfdmFyX3R6bmFtZT15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JYWNfY3ZfdmFyX3R6bmFtZT1ubworLWZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX3R6bmFtZSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Zhcl90em5hbWUiID4mNjsgfQorLSAgaWYgdGVzdCAkYWNfY3ZfdmFyX3R6bmFtZSA9IHllczsgdGhlbgorK0NQUEZMQUdTPSIke1VVSURfQ1BQRkxBR1N9ICR7Q1BQRkxBR1N9IgorK0xERkxBR1M9IiR7VVVJRF9MREZMQUdTfSAke0xERkxBR1N9IgorK0xJQlM9IiR7VVVJRF9MSUJTfSAke0xJQlN9IgorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBIQVZFX1RaTkFNRSAxCisrZm9yIGFjX2hlYWRlciBpbiB1dWlkL3V1aWQuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ1dWlkL3V1aWQuaCIgImFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9VVUlEX1VVSURfSCAxCisgX0FDRU9GCisgCistICBmaQorIGZpCisgCisrZG9uZQorKworIAorICMKKy0jIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKKysjIENoZWNrIGZvciBQT1NJWCB0aHJlYWQgc3VwcG9ydC4KKyAjCisgCistIyBUaGUgVWx0cml4IDQuMiBtaXBzIGJ1aWx0aW4gYWxsb2NhIGRlY2xhcmVkIGJ5IGFsbG9jYS5oIG9ubHkgd29ya3MKKy0jIGZvciBjb25zdGFudCBhcmd1bWVudHMuICBVc2VsZXNzIQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDxhbGxvY2EuaD4KKy1pbnQKKy1tYWluICgpCisteworLWNoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDIgKiBzaXplb2YgKGludCkpOworLQkJCSAgaWYgKHApIHJldHVybiAwOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBhY19jdl93b3JraW5nX2FsbG9jYV9oPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlhY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCA9IHllczsgdGhlbgorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfQUxMT0NBX0ggMQorLV9BQ0VPRgorK2FjeF9wdGhyZWFkX29rPW5vCisgCistZmkKKysjIFdlIHVzZWQgdG8gY2hlY2sgZm9yIHB0aHJlYWQuaCBmaXJzdCwgYnV0IHRoaXMgZmFpbHMgaWYgcHRocmVhZC5oCisrIyByZXF1aXJlcyBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzIChlLmcuIG9uIFRydWU2NCBvciBTZXF1ZW50KS4KKysjIEl0IGdldHMgY2hlY2tlZCBmb3IgaW4gdGhlIGxpbmsgdGVzdCBhbnl3YXkuCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyMgRmlyc3Qgb2YgYWxsLCBjaGVjayBpZiB0aGUgdXNlciBoYXMgc2V0IGFueSBvZiB0aGUgUFRIUkVBRF9MSUJTLAorKyMgZXRjZXRlcmEgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaWYgdGhyZWFkcyBsaW5raW5nIHdvcmtzIHVzaW5nCisrIyB0aGVtOgorK2lmIHRlc3QgeCIkUFRIUkVBRF9MSUJTJFBUSFJFQURfQ0ZMQUdTIiAhPSB4OyB0aGVuCisrICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisrICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKysgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9qb2luIGluIExJQlM9JFBUSFJFQURfTElCUyB3aXRoIENGTEFHUz0kUFRIUkVBRF9DRkxBR1MuLi4gIiA+JjY7IH0KKysgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistI2lmZGVmIF9fR05VQ19fCistIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKy0jZWxzZQorLSMgaWZkZWYgX01TQ19WRVIKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKy0jIGVsc2UKKy0jICBpZmRlZiBIQVZFX0FMTE9DQV9ICistIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorLSMgIGVsc2UKKy0jICAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorLSMgICBlbHNlCistIyAgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworLWNoYXIgKmFsbG9jYSAoKTsKKy0jICAgIGVuZGlmCistIyAgIGVuZGlmCistIyAgZW5kaWYKKy0jIGVuZGlmCistI2VuZGlmCisgCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisrI2VuZGlmCisrY2hhciBwdGhyZWFkX2pvaW4gKCk7CisgaW50CisgbWFpbiAoKQorIHsKKy1jaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgxKTsKKy0JCQkJICAgIGlmIChwKSByZXR1cm4gMDsKKytyZXR1cm4gcHRocmVhZF9qb2luICgpOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBhY3hfcHRocmVhZF9vaz15ZXMKKyBmaQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWN4X3B0aHJlYWRfb2siID4mNQorKyRhc19lY2hvICIkYWN4X3B0aHJlYWRfb2siID4mNjsgfQorKyAgICAgICAgaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9vayIgPSB4bm87IHRoZW4KKysgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisrICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCisrICAgICAgICBmaQorKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKysgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY2OyB9CisgCistaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSB5ZXM7IHRoZW4KKysjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisrIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCisrIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKKysjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfQUxMT0NBIDEKKy1fQUNFT0YKKysjIENyZWF0ZSBhIGxpc3Qgb2YgdGhyZWFkIGZsYWdzIHRvIHRyeS4gIEl0ZW1zIHN0YXJ0aW5nIHdpdGggYSAiLSIgYXJlCisrIyBDIGNvbXBpbGVyIGZsYWdzLCBhbmQgb3RoZXIgaXRlbXMgYXJlIGxpYnJhcnkgbmFtZXMsIGV4Y2VwdCBmb3IgIm5vbmUiCisrIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgorKyMgd2hpY2ggaXMgYSBwcm9ncmFtIHJldHVybmluZyB0aGUgZmxhZ3MgZm9yIHRoZSBQdGggZW11bGF0aW9uIGxpYnJhcnkuCisgCistZWxzZQorLSAgIyBUaGUgU1ZSMyBsaWJQVyBhbmQgU1ZSNCBsaWJ1Y2IgYm90aCBjb250YWluIGluY29tcGF0aWJsZSBmdW5jdGlvbnMKKy0jIHRoYXQgY2F1c2UgdHJvdWJsZS4gIFNvbWUgdmVyc2lvbnMgZG8gbm90IGV2ZW4gY29udGFpbiBhbGxvY2Egb3IKKy0jIGNvbnRhaW4gYSBidWdneSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFsbG9jYSwKKy0jIHVzZSBhciB0byBleHRyYWN0IGFsbG9jYS5vIGZyb20gdGhlbSBpbnN0ZWFkIG9mIGNvbXBpbGluZyBhbGxvY2EuYy4KKythY3hfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAta3RocmVhZCBsdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKKyAKKy1BTExPQ0E9XCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0CisrIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQorKyMgaW5kaXZpZHVhbCBpdGVtcyBmb2xsb3c6CisgCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIENfQUxMT0NBIDEKKy1fQUNFT0YKKysjIHB0aHJlYWRzOiBBSVggKG11c3QgY2hlY2sgdGhpcyBiZWZvcmUgLWxwdGhyZWFkKQorKyMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAorKyMgICAgICAgb3RoZXIgY29tcGlsZXIgZmxhZ3MgdG8gcHJldmVudCBjb250aW51YWwgY29tcGlsZXIgd2FybmluZ3MKKysjIC1LdGhyZWFkOiBTZXF1ZW50ICh0aHJlYWRzIGluIGxpYmMsIGJ1dCAtS3RocmVhZCBuZWVkZWQgZm9yIHB0aHJlYWQuaCkKKysjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisrIyBsdGhyZWFkOiBMaW51eFRocmVhZHMgcG9ydCBvbiBGcmVlQlNEIChhbHNvIHByZWZlcnJlZCB0byAtcHRocmVhZCkKKysjIC1wdGhyZWFkOiBMaW51eC9nY2MgKGtlcm5lbCB0aHJlYWRzKSwgQlNEL2djYyAodXNlcmxhbmQgdGhyZWFkcykKKysjIC1wdGhyZWFkczogU29sYXJpcy9nY2MKKysjIC1tdGhyZWFkczogTWluZ3czMi9nY2MsIEx5bngvZ2NjCisrIyAtbXQ6IFN1biBXb3Jrc2hvcCBDIChtYXkgb25seSBsaW5rIFN1bk9TIHRocmVhZHMgWy1sdGhyZWFkXSwgYnV0IGl0CisrIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIHRvbzsKKysjICAgICAgYWxzbyBkZWZpbmVzIC1EX1JFRU5UUkFOVCkKKysjICAgICAgLi4uIC1tdCBpcyBhbHNvIHRoZSBwdGhyZWFkcyBmbGFnIGZvciBIUC9hQ0MKKysjIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQorKyMgLS10aHJlYWQtc2FmZTogS0FJIEMrKworKyMgcHRocmVhZC1jb25maWc6IHVzZSBwdGhyZWFkLWNvbmZpZyBwcm9ncmFtIChmb3IgR05VIFB0aCBsaWJyYXJ5KQorKworK2Nhc2UgIiR7aG9zdF9jcHV9LSR7aG9zdF9vc30iIGluCisrICAgICAgICAqc29sYXJpcyopCisrCisrICAgICAgICAjIE9uIFNvbGFyaXMgKGF0IGxlYXN0LCBmb3Igc29tZSB2ZXJzaW9ucyksIGxpYmMgY29udGFpbnMgc3R1YmJlZAorKyAgICAgICAgIyAobm9uLWZ1bmN0aW9uYWwpIHZlcnNpb25zIG9mIHRoZSBwdGhyZWFkcyByb3V0aW5lcywgc28gbGluay1iYXNlZAorKyAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuICAoV2UgbmVlZCB0byBsaW5rIHdpdGggLXB0aHJlYWRzLy1tdC8KKysgICAgICAgICMgLWxwdGhyZWFkLikgIChUaGUgc3R1YnMgYXJlIG1pc3NpbmcgcHRocmVhZF9jbGVhbnVwX3B1c2gsIG9yIHJhdGhlcgorKyAgICAgICAgIyBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGlzIG1hY3JvLCBzbyB3ZSBjb3VsZCBjaGVjayBmb3IgdGhhdCwgYnV0CisrICAgICAgICAjIHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YiB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvLAorKyAgICAgICAgIyB3ZSdsbCBqdXN0IGxvb2sgZm9yIC1wdGhyZWFkcyBhbmQgLWxwdGhyZWFkIGZpcnN0OgorKworKyAgICAgICAgYWN4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkcyBwdGhyZWFkIC1tdCAtcHRocmVhZCAkYWN4X3B0aHJlYWRfZmxhZ3MiCisrICAgICAgICA7OworK2VzYWMKKysKKytpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorK2ZvciBmbGFnIGluICRhY3hfcHRocmVhZF9mbGFnczsgZG8KKysKKysgICAgICAgIGNhc2UgJGZsYWcgaW4KKysgICAgICAgICAgICAgICAgbm9uZSkKKysgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFncy4uLiAiID4mNjsgfQorKyAgICAgICAgICAgICAgICA7OworIAorKyAgICAgICAgICAgICAgICAtKikKKysgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWcuLi4gIiA+JjY7IH0KKysgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiRmbGFnIgorKyAgICAgICAgICAgICAgICA7OworIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9vc19jcmF5K3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKwkJcHRocmVhZC1jb25maWcpCisrCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB0aHJlYWQtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgcHRocmVhZC1jb25maWc7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2lmIGRlZmluZWQgQ1JBWSAmJiAhIGRlZmluZWQgQ1JBWTIKKy13ZWJlY3JheQorLSNlbHNlCistd2Vub3RiZWNyYXkKKy0jZW5kaWYKKysgIGlmIHRlc3QgLW4gIiRhY3hfcHRocmVhZF9jb25maWciOyB0aGVuCisrICBhY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZz0iJGFjeF9wdGhyZWFkX2NvbmZpZyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZz0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworIAorLV9BQ0VPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgYWNfY3Zfb3NfY3JheT15ZXMKKy1lbHNlCistICBhY19jdl9vc19jcmF5PW5vCisrICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWciICYmIGFjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnPSJubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorLQorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29zX2NyYXkiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X29zX2NyYXkgPSB5ZXM7IHRoZW4KKy0gIGZvciBhY19mdW5jIGluIF9nZXRiNjcgR0VUQjY3IGdldGI2NzsgZG8KKy0gICAgYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworK2FjeF9wdGhyZWFkX2NvbmZpZz0kYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWcKKytpZiB0ZXN0IC1uICIkYWN4X3B0aHJlYWRfY29uZmlnIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY3hfcHRocmVhZF9jb25maWciID4mNQorKyRhc19lY2hvICIkYWN4X3B0aHJlYWRfY29uZmlnIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisrCQlpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX2NvbmZpZyIgPSB4bm87IHRoZW4gY29udGludWU7IGZpCisrCQlQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKysJCVBUSFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0tbGlic2AiCisrCQk7OworIAorLSN1bmRlZiAkYWNfZnVuYworKyAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkZmxhZy4uLiAiID4mNjsgfQorKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sJGZsYWciCisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKysgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisrICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisrICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorIAorKyAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAorKyAgICAgICAgIyBzaW5jZSBzb21lIGZ1bmN0aW9ucyBtYXkgYmUgbWFjcm9zLiAgKE9uIHRoZSBTZXF1ZW50LCB3ZQorKyAgICAgICAgIyBuZWVkIGEgc3BlY2lhbCBmbGFnIC1LdGhyZWFkIHRvIG1ha2UgdGhpcyBoZWFkZXIgY29tcGlsZS4pCisrICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBpdCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAorKyAgICAgICAgIyB3aGlsZSBwdGhyZWFkX2NyZWF0ZSBpcyBpbiBsaWJjLiAgV2UgY2hlY2sgZm9yIHB0aHJlYWRfYXR0cl9pbml0CisrICAgICAgICAjIGR1ZSB0byBERUMgY3JhemluZXNzIHdpdGggLWxwdGhyZWFkcy4gIFdlIGNoZWNrIGZvcgorKyAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0aHJlYWQKKysgICAgICAgICMgZnVuY3Rpb25zIG9uIFNvbGFyaXMgdGhhdCBkb2Vzbid0IGhhdmUgYSBub24tZnVuY3Rpb25hbCBsaWJjIHN0dWIuCisrICAgICAgICAjIFdlIHRyeSBwdGhyZWFkX2NyZWF0ZSBvbiBnZW5lcmFsIHByaW5jaXBsZXMuCisrICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisgaW50CisgbWFpbiAoKQorIHsKKy1yZXR1cm4gJGFjX2Z1bmMgKCk7CisrcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOworKyAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKysgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWV2YWwgIiRhc19hY192YXI9bm8iCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWN4X3B0aHJlYWRfb2s9eWVzCisgZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKysgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIAorLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIENSQVlfU1RBQ0tTRUdfRU5EICRhY19mdW5jCistX0FDRU9GCisrICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjeF9wdGhyZWFkX29rIiA+JjUKKyskYXNfZWNobyAiJGFjeF9wdGhyZWFkX29rIiA+JjY7IH0KKysgICAgICAgIGlmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGZpCisgCistICAgIGJyZWFrCisrICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKysgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCisrZG9uZQorIGZpCisgCistICBkb25lCistZmkKKysjIFZhcmlvdXMgb3RoZXIgY2hlY2tzOgorK2lmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisrICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKy0gIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTAKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlLi4uICIgPiY2OyB9CisrCWF0dHJfbmFtZT11bmtub3duCisrCWZvciBhdHRyIGluIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQ7IGRvCisrCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistaW50CistZmluZF9zdGFja19kaXJlY3Rpb24gKCkKKy17CistICBzdGF0aWMgY2hhciAqYWRkciA9IDA7CistICBhdXRvIGNoYXIgZHVtbXk7CistICBpZiAoYWRkciA9PSAwKQorLSAgICB7CistICAgICAgYWRkciA9ICZkdW1teTsKKy0gICAgICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKCk7CistICAgIH0KKy0gIGVsc2UKKy0gICAgcmV0dXJuICgmZHVtbXkgPiBhZGRyKSA/IDEgOiAtMTsKKy19CistCisrI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyBpbnQKKyBtYWluICgpCisgeworLSAgcmV0dXJuIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpIDwgMDsKKytpbnQgYXR0cj0kYXR0cjsgcmV0dXJuIGF0dHI7CisrICA7CisrICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCistICB7IChjYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0xCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKy1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0oIGV4aXQgJGFjX3N0YXR1cyApCistYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKKy1maQorLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistCistCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgYXR0cl9uYW1lPSRhdHRyOyBicmVhaworIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrCWRvbmUKKysgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXR0cl9uYW1lIiA+JjUKKyskYXNfZWNobyAiJGF0dHJfbmFtZSIgPiY2OyB9CisrICAgICAgICBpZiB0ZXN0ICIkYXR0cl9uYW1lIiAhPSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRTsgdGhlbgorIAorIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KKysjZGVmaW5lIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFICRhdHRyX25hbWUKKyBfQUNFT0YKKyAKKysgICAgICAgIGZpCisgCistZmkKKysgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzLi4uICIgPiY2OyB9CisrICAgICAgICBmbGFnPW5vCisrICAgICAgICBjYXNlICIke2hvc3RfY3B1fS0ke2hvc3Rfb3N9IiBpbgorKyAgICAgICAgICAgICotYWl4KiB8ICotZnJlZWJzZCogfCAqLWRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CisrICAgICAgICAgICAgKnNvbGFyaXMqIHwgKi1vc2YqIHwgKi1ocHV4KikgZmxhZz0iLURfUkVFTlRSQU5UIjs7CisrICAgICAgICBlc2FjCisrICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtmbGFnfSIgPiY1CisrJGFzX2VjaG8gIiR7ZmxhZ30iID4mNjsgfQorKyAgICAgICAgaWYgdGVzdCAieCRmbGFnIiAhPSB4bm87IHRoZW4KKysgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgorKyAgICAgICAgZmkKKyAKKysgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisrICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAKKy1mb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oCisrICAgICAgICAjIE1vcmUgQUlYIGxvc3NhZ2U6IG11c3QgY29tcGlsZSB3aXRoIHhsY19yIG9yIGNjX3IKKysJaWYgdGVzdCB4IiRHQ0MiICE9IHh5ZXM7IHRoZW4KKysgICAgICAgICAgZm9yIGFjX3Byb2cgaW4geGxjX3IgY2NfcgorIGRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3Byb2dfUFRIUkVBRF9DQys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworKyAgaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCisrICBhY19jdl9wcm9nX1BUSFJFQURfQ0M9IiRQVEhSRUFEX0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19QVEhSRUFEX0NDPSIkYWNfcHJvZyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKyAKKy0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisrZmkKKytmaQorK1BUSFJFQURfQ0M9JGFjX2N2X3Byb2dfUFRIUkVBRF9DQworK2lmIHRlc3QgLW4gIiRQVEhSRUFEX0NDIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQVEhSRUFEX0NDIiA+JjUKKyskYXNfZWNobyAiJFBUSFJFQURfQ0MiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisgCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CistX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKysgIHRlc3QgLW4gIiRQVEhSRUFEX0NDIiAmJiBicmVhaworK2RvbmUKKyt0ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJHtDQ30iCisrCisrICAgICAgICBlbHNlCisrICAgICAgICAgIFBUSFJFQURfQ0M9JENDCisrCWZpCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrICAgICAgICBQVEhSRUFEX0NDPSIkQ0MiCisrZmkKKyAKKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisrCisrCisrCisrCisrIyBGaW5hbGx5LCBleGVjdXRlIEFDVElPTi1JRi1GT1VORC9BQ1RJT04tSUYtTk9ULUZPVU5EOgorK2lmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRCAxIiA+PmNvbmZkZWZzLmgKKysKKysgICAgICAgIDoKKytlbHNlCisrICAgICAgICBhY3hfcHRocmVhZF9vaz1ubworKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyBQT1NJWCB0aHJlYWRzLiIgIiRMSU5FTk8iIDUKKyBmaQorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKyAKKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKworK0NGTEFHUz0iJHtQVEhSRUFEX0NGTEFHU30gJHtDRkxBR1N9IgorK0NQUEZMQUdTPSIke1BUSFJFQURfQ1BQRkxBR1N9ICR7Q1BQRkxBR1N9IgorK0xERkxBR1M9IiR7UFRIUkVBRF9MREZMQUdTfSAke0xERkxBR1N9IgorK0xJQlM9IiR7UFRIUkVBRF9MSUJTfSAke0xJQlN9IgorKworKyMKKysjIENoZWNrIGZvciB3aGVyZSBjbG9ja19nZXR0aW1lIGFuZCBmcmllbmRzIGFyZSBsb2NhdGVkLgorKyMKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjbG9ja19nZXR0aW1lIGluIC1scnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjbG9ja19nZXR0aW1lIGluIC1scnQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworK0xJQlM9Ii1scnQgICRMSUJTIgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisrI2VuZGlmCisrY2hhciBjbG9ja19nZXR0aW1lICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWU9eWVzCisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWU9bm8KKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPSB4eWVzOyB0aGVuIDoKKyAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorKyNkZWZpbmUgSEFWRV9MSUJSVCAxCisgX0FDRU9GCisgCisrICBMSUJTPSItbHJ0ICRMSUJTIgorKworIGZpCisgCistZG9uZQorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIGNob3duIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGNob3duLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19jaG93bl93b3JrcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorLSAgYWNfY3ZfZnVuY19jaG93bl93b3Jrcz1ubworKyMKKysjIENoZWNrIGZvciBETEZDTiBzdXBwb3J0LgorKyMKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworK0xJQlM9Ii1sZGwgICRMSUJTIgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8ZmNudGwuaD4KKyAKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIGRsb3BlbiAoKTsKKyBpbnQKKyBtYWluICgpCisgeworLSAgY2hhciAqZiA9ICJjb25mdGVzdC5jaG93biI7CistICBzdHJ1Y3Qgc3RhdCBiZWZvcmUsIGFmdGVyOworLQorLSAgaWYgKGNyZWF0IChmLCAwNjAwKSA8IDApCistICAgIHJldHVybiAxOworLSAgaWYgKHN0YXQgKGYsICZiZWZvcmUpIDwgMCkKKy0gICAgcmV0dXJuIDE7CistICBpZiAoY2hvd24gKGYsICh1aWRfdCkgLTEsIChnaWRfdCkgLTEpID09IC0xKQorLSAgICByZXR1cm4gMTsKKy0gIGlmIChzdGF0IChmLCAmYWZ0ZXIpIDwgMCkKKy0gICAgcmV0dXJuIDE7CistICByZXR1cm4gISAoYmVmb3JlLnN0X3VpZCA9PSBhZnRlci5zdF91aWQgJiYgYmVmb3JlLnN0X2dpZCA9PSBhZnRlci5zdF9naWQpOworLQorK3JldHVybiBkbG9wZW4gKCk7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCistICB7IChjYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9mdW5jX2Nob3duX3dvcmtzPXllcworK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKy1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0oIGV4aXQgJGFjX3N0YXR1cyApCistYWNfY3ZfZnVuY19jaG93bl93b3Jrcz1ubworKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworIGZpCistcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfTElCREwgMQorK19BQ0VPRgorIAorLQorLXJtIC1mIGNvbmZ0ZXN0LmNob3duCisrICBMSUJTPSItbGRsICRMSUJTIgorIAorIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19jaG93bl93b3JrcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfY2hvd25fd29ya3MiID4mNjsgfQorLWlmIHRlc3QgJGFjX2N2X2Z1bmNfY2hvd25fd29ya3MgPSB5ZXM7IHRoZW4KKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgSEFWRV9DSE9XTiAxCisrCisrZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorIF9BQ0VPRgorIAorIGZpCisgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjbG9zZWRpciByZXR1cm5zIHZvaWQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBjbG9zZWRpciByZXR1cm5zIHZvaWQuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKy0gIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKytkb25lCisrCisrCisrIworKyMgQ2hlY2sgZm9yIG1hdGggc3VwcG9ydC4KKysjCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9saWJfbV9mbG9vcis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKytMSUJTPSItbG0gICRMSUJTIgorK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcl9kaXJlbnQ+CistI2lmbmRlZiBfX2NwbHVzcGx1cworLWludCBjbG9zZWRpciAoKTsKKy0jZW5kaWYKKyAKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIGZsb29yICgpOworIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuIGNsb3NlZGlyIChvcGVuZGlyICgiLiIpKSAhPSAwOworK3JldHVybiBmbG9vciAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD1ubworK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2xpYl9tX2Zsb29yPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CistZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistKCBleGl0ICRhY19zdGF0dXMgKQorLWFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKysgIGFjX2N2X2xpYl9tX2Zsb29yPW5vCisgZmkKKy1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tX2Zsb29yIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9MSUJNIDEKKytfQUNFT0YKKyAKKysgIExJQlM9Ii1sbSAkTElCUyIKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY2OyB9CistaWYgdGVzdCAkYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkID0geWVzOyB0aGVuCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIENMT1NFRElSX1ZPSUQgMQorKworK2ZvciBhY19oZWFkZXIgaW4gbWF0aC5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1hdGguaCIgImFjX2N2X2hlYWRlcl9tYXRoX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9tYXRoX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX01BVEhfSCAxCisgX0FDRU9GCisgCisgZmkKKyAKKytkb25lCisgCistZm9yIGFjX2hlYWRlciBpbiB2Zm9yay5oCistZG8KKy1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWVsc2UKKy0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlhY19oZWFkZXJfY29tcGlsZXI9bm8KKysjCisrIyBDaGVjayBmb3Igd2hlcmUgdGhlIGRlZmF1bHQgbG9jYWwgdGltZSB6b25lIGRhdGEgZmlsZSBhbmQgdGltZSB6b25lCisrIyBkYXRhIGZpbGVzIGFyZS93aWxsIGJlIGxvY2F0ZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0gKHRoaXMgbWlnaHQgYmUKKysjIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoZXkgYXJlIG9uIHRoZSBidWlsZCBzeXN0ZW0pLgorKyMKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGRlZmF1bHQgbG9jYWwgdGltZSB6b25lIGRhdGEgZmlsZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZGVmYXVsdCBsb2NhbCB0aW1lIHpvbmUgZGF0YSBmaWxlLi4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ei1kZWZhdWx0IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfdHpfZGVmYXVsdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX3R6X2RlZmF1bHQ7IHR6X2RlZmF1bHRfZmlsZT0ke3dpdGh2YWx9CisrZWxzZQorKyAgdHpfZGVmYXVsdF9maWxlPSIvZXRjL2xvY2FsdGltZSIKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7dHpfZGVmYXVsdF9maWxlfSIgPiY1CisrJGFzX2VjaG8gIiR7dHpfZGVmYXVsdF9maWxlfSIgPiY2OyB9CisgCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgVFpERUZBVUxUICIke3R6X2RlZmF1bHRfZmlsZX0iCisgX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCistZmkKKyAKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgdGltZSB6b25lIGRhdGEgZmlsZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIHRpbWUgem9uZSBkYXRhIGZpbGVzLi4uICIgPiY2OyB9CisgCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLXR6LWRhdGEgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF90el9kYXRhK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfdHpfZGF0YTsgdHpfZGF0YV9kaXI9JHt3aXRodmFsfQorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKysgIHR6X2RhdGFfZGlyPSIvdXNyL3NoYXJlL3pvbmVpbmZvIgorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorIAorLWZpCistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7dHpfZGF0YV9kaXJ9IiA+JjUKKyskYXNfZWNobyAiJHt0el9kYXRhX2Rpcn0iID4mNjsgfQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFRaRElSICIke3R6X2RhdGFfZGlyfSIKKyBfQUNFT0YKKyAKKy1maQorIAorLWRvbmUKKysjCisrIyBDaGVjayBmb3IgdHpjb2RlIGhlYWRlciBzdXBwb3J0LgorKyMKKysjIE1vc3Qgc3lzdGVtcyBiYXNlZCBvbiB0aGUgR05VIEMgbGlicmFyeSBkbyBub3QgaGF2ZSB0aGUgaGVhZGVyIGZyb20KKysjIHR6Y29kZSAoc2VlIGZ0cDovL2Vsc2llLm5jaS5uaWguZ292L3B1Yi8pLCAidHpmaWxlLmgiIGluc3RhbGxlZCB3aGljaCBpcworKyMgbmVlZGVkLiBDaGVjayBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXNuJ3QgbGV0IHRoZSB1c2VyIHBvaW50IHVzIGF0IGl0LgorKyMKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLXR6LWluY2x1ZGVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfdHpfaW5jbHVkZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF90el9pbmNsdWRlczsKKysJCWlmIHRlc3QgIngke3dpdGh2YWx9IiAhPSAieHllcyI7IHRoZW4KKysJCQlpZiB0ZXN0IC1kICIke3dpdGh2YWx9L2luY2x1ZGUiOyB0aGVuCisrCQkJCVRaX0NQUEZMQUdTPSItSSR7d2l0aHZhbH0vaW5jbHVkZSIKKysJCQllbHNlCisrCQkJCVRaX0NQUEZMQUdTPSItSSR7d2l0aHZhbH0iCisrCQkJZmkKKysJCWZpCisgCistZm9yIGFjX2Z1bmMgaW4gZm9yayB2Zm9yaworLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworK2ZpCisgCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworIAorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorK0NQUEZMQUdTPSIke1RaX0NQUEZMQUdTfSAke0NQUEZMQUdTfSIKKyAKKy0jdW5kZWYgJGFjX2Z1bmMKKythY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidHpmaWxlLmgiICJhY19jdl9oZWFkZXJfdHpmaWxlX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl90emZpbGVfaCIgPSB4eWVzOyB0aGVuIDoKKysgIHRydWUKKytlbHNlCisrICBhc19mbl9lcnJvciAkPyAiJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzICd0emZpbGUuaCcuIERvd25sb2FkIHRoZSBsYXRlc3QgdHpjb2RlIHBhY2thZ2UgZnJvbSAnZnRwOi8vZWxzaWUubmNpLm5paC5nb3YvcHViLycgYW5kL29yIHVzZSB0aGUgJy0td2l0aC10ei1pbmNsdWRlcz1ESVInIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiIgIiRMSU5FTk8iIDUKKytmaQorIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrCisrCisrIworKyMgQ2hlY2sgZm9yIGhlYWRlcnMKKysjCisrCisrYWNfaGVhZGVyX2RpcmVudD1ubworK2ZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbworKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyX2RpcmVudF8kYWNfaGRyIiB8ICRhc190cl9zaGAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIuLi4gIiA+JjY7IH0KKytpZiBldmFsIFwkeyRhc19hY19IZWFkZXIrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8JGFjX2hkcj4KKyAKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiAkYWNfZnVuYyAoKTsKKytpZiAoKERJUiAqKSAwKQorK3JldHVybiAwOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorK2V2YWwgYWNfcmVzPVwkJGFzX2FjX0hlYWRlcgorKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hkciIgfCAkYXNfdHJfY3BwYCAxCisgX0FDRU9GCisgCisrYWNfaGVhZGVyX2RpcmVudD0kYWNfaGRyOyBicmVhaworIGZpCistZG9uZQorIAorLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrIiA9IHh5ZXM7IHRoZW4KKy0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIGZvcmsiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgZm9yay4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZm9ya193b3JrcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorLSAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPWNyb3NzCisrZG9uZQorKyMgVHdvIHZlcnNpb25zIG9mIG9wZW5kaXIgZXQgYWwuIGFyZSBpbiAtbGRpciBhbmQgLWx4IG9uIFNDTyBYZW5peC4KKytpZiB0ZXN0ICRhY19oZWFkZXJfZGlyZW50ID0gZGlyZW50Lmg7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisrY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgb3BlbmRpciAoKTsKKyBpbnQKKyBtYWluICgpCisgeworLQorLQkgIC8qIEJ5IFJ1ZWRpZ2VyIEt1aGxtYW5uLiAqLworLQkgIHJldHVybiBmb3JrICgpIDwgMDsKKy0KKytyZXR1cm4gb3BlbmRpciAoKTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKy0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSggZXhpdCAkYWNfc3RhdHVzICkKKy1hY19jdl9mdW5jX2Zvcmtfd29ya3M9bm8KKy1maQorLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZvciBhY19saWIgaW4gJycgZGlyOyBkbworKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKysgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorKyAgZWxzZQorKyAgICBhY19yZXM9LWwkYWNfbGliCisrICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKysgIGZpCisrICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9zZWFyY2hfb3BlbmRpcj0kYWNfcmVzCisgZmkKKy0KKy0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0CisrICBpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKysgIGJyZWFrCisgZmkKKy17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNjsgfQorK2RvbmUKKytpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAKKyBlbHNlCistICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9JGFjX2N2X2Z1bmNfZm9yaworKyAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KKyBmaQorLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgorLSAgY2FzZSAkaG9zdCBpbgorLSAgICAqLSotYW1pZ2FvcyogfCAqLSotbXNkb3NkamdwcCopCistICAgICAgIyBPdmVycmlkZSwgYXMgdGhlc2Ugc3lzdGVtcyBoYXZlIG9ubHkgYSBkdW1teSBmb3JrKCkgc3R1YgorLSAgICAgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1ubworLSAgICAgIDs7CistICAgICopCistICAgICAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPXllcworLSAgICAgIDs7CistICBlc2FjCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX2Zvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQorK3JtIGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKKyBmaQorLWFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9JGFjX2N2X2Z1bmNfdmZvcmsKKy1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdmZvcmsiID0geHllczsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgdmZvcmsiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgdmZvcmsuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgdGVzdCAiJHthY19jdl9mdW5jX3Zmb3JrX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNQorKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNjsgfQorK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX29wZW5kaXIKKytpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisrICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorKworK2ZpCisrCisgZWxzZQorLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKy0gIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9Y3Jvc3MKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisrY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBUaGFua3MgdG8gUGF1bCBFZ2dlcnQgZm9yIHRoaXMgdGVzdC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KKy0jaWZkZWYgSEFWRV9WRk9SS19ICistIyBpbmNsdWRlIDx2Zm9yay5oPgorLSNlbmRpZgorLS8qIE9uIHNvbWUgc3BhcmMgc3lzdGVtcywgY2hhbmdlcyBieSB0aGUgY2hpbGQgdG8gbG9jYWwgYW5kIGluY29taW5nCistICAgYXJndW1lbnQgcmVnaXN0ZXJzIGFyZSBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIHBhcmVudC4gIFRoZSBjb21waWxlcgorLSAgIGlzIHRvbGQgYWJvdXQgdGhpcyB3aXRoICNpbmNsdWRlIDx2Zm9yay5oPiwgYnV0IHNvbWUgY29tcGlsZXJzCistICAgKGUuZy4gZ2NjIC1PKSBkb24ndCBncm9rIDx2Zm9yay5oPi4gIFRlc3QgZm9yIHRoaXMgYnkgdXNpbmcgYQorLSAgIHN0YXRpYyB2YXJpYWJsZSB3aG9zZSBhZGRyZXNzIGlzIHB1dCBpbnRvIGEgcmVnaXN0ZXIgdGhhdCBpcworLSAgIGNsb2JiZXJlZCBieSB0aGUgdmZvcmsuICAqLworLXN0YXRpYyB2b2lkCisrCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKy1zcGFyY19hZGRyZXNzX3Rlc3QgKGludCBhcmcpCistIyBlbHNlCistc3BhcmNfYWRkcmVzc190ZXN0IChhcmcpIGludCBhcmc7CisrZXh0ZXJuICJDIgorICNlbmRpZgorLXsKKy0gIHN0YXRpYyBwaWRfdCBjaGlsZDsKKy0gIGlmICghY2hpbGQpIHsKKy0gICAgY2hpbGQgPSB2Zm9yayAoKTsKKy0gICAgaWYgKGNoaWxkIDwgMCkgeworLSAgICAgIHBlcnJvciAoInZmb3JrIik7CistICAgICAgX2V4aXQoMik7CistICAgIH0KKy0gICAgaWYgKCFjaGlsZCkgeworLSAgICAgIGFyZyA9IGdldHBpZCgpOworLSAgICAgIHdyaXRlKC0xLCAiIiwgMCk7CistICAgICAgX2V4aXQgKGFyZyk7CistICAgIH0KKy0gIH0KKy19CistCisrY2hhciBvcGVuZGlyICgpOworIGludAorIG1haW4gKCkKKyB7CistICBwaWRfdCBwYXJlbnQgPSBnZXRwaWQgKCk7CistICBwaWRfdCBjaGlsZDsKKy0KKy0gIHNwYXJjX2FkZHJlc3NfdGVzdCAoMCk7CistCistICBjaGlsZCA9IHZmb3JrICgpOworLQorLSAgaWYgKGNoaWxkID09IDApIHsKKy0gICAgLyogSGVyZSBpcyBhbm90aGVyIHRlc3QgZm9yIHNwYXJjIHZmb3JrIHJlZ2lzdGVyIHByb2JsZW1zLiAgVGhpcworLSAgICAgICB0ZXN0IHVzZXMgbG90cyBvZiBsb2NhbCB2YXJpYWJsZXMsIGF0IGxlYXN0IGFzIG1hbnkgbG9jYWwKKy0gICAgICAgdmFyaWFibGVzIGFzIG1haW4gaGFzIGFsbG9jYXRlZCBzbyBmYXIgaW5jbHVkaW5nIGNvbXBpbGVyCistICAgICAgIHRlbXBvcmFyaWVzLiAgNCBsb2NhbHMgYXJlIGVub3VnaCBmb3IgZ2NjIDEuNDAuMyBvbiBhIFNvbGFyaXMKKy0gICAgICAgNC4xLjMgc3BhcmMsIGJ1dCB3ZSB1c2UgOCB0byBiZSBzYWZlLiAgQSBidWdneSBjb21waWxlciBzaG91bGQKKy0gICAgICAgcmV1c2UgdGhlIHJlZ2lzdGVyIG9mIHBhcmVudCBmb3Igb25lIG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMsCistICAgICAgIHNpbmNlIGl0IHdpbGwgdGhpbmsgdGhhdCBwYXJlbnQgY2FuJ3QgcG9zc2libHkgYmUgdXNlZCBhbnkgbW9yZQorLSAgICAgICBpbiB0aGlzIHJvdXRpbmUuICBBc3NpZ25pbmcgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHdpbGwgdGh1cworLSAgICAgICBtdW5nZSBwYXJlbnQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgKi8KKy0gICAgcGlkX3QKKy0gICAgICBwID0gZ2V0cGlkKCksIHAxID0gZ2V0cGlkKCksIHAyID0gZ2V0cGlkKCksIHAzID0gZ2V0cGlkKCksCistICAgICAgcDQgPSBnZXRwaWQoKSwgcDUgPSBnZXRwaWQoKSwgcDYgPSBnZXRwaWQoKSwgcDcgPSBnZXRwaWQoKTsKKy0gICAgLyogQ29udmluY2UgdGhlIGNvbXBpbGVyIHRoYXQgcC4ucDcgYXJlIGxpdmU7IG90aGVyd2lzZSwgaXQgbWlnaHQKKy0gICAgICAgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIHJlZ2lzdGVyIGZvciBhbGwgOCBsb2NhbCB2YXJpYWJsZXMuICAqLworLSAgICBpZiAocCAhPSBwMSB8fCBwICE9IHAyIHx8IHAgIT0gcDMgfHwgcCAhPSBwNAorLQl8fCBwICE9IHA1IHx8IHAgIT0gcDYgfHwgcCAhPSBwNykKKy0gICAgICBfZXhpdCgxKTsKKy0KKy0gICAgLyogT24gc29tZSBzeXN0ZW1zIChlLmcuIElSSVggMy4zKSwgdmZvcmsgZG9lc24ndCBzZXBhcmF0ZSBwYXJlbnQKKy0gICAgICAgZnJvbSBjaGlsZCBmaWxlIGRlc2NyaXB0b3JzLiAgSWYgdGhlIGNoaWxkIGNsb3NlcyBhIGRlc2NyaXB0b3IKKy0gICAgICAgYmVmb3JlIGl0IGV4ZWNzIG9yIGV4aXRzLCB0aGlzIG11bmdlcyB0aGUgcGFyZW50J3MgZGVzY3JpcHRvcgorLSAgICAgICBhcyB3ZWxsLiAgVGVzdCBmb3IgdGhpcyBieSBjbG9zaW5nIHN0ZG91dCBpbiB0aGUgY2hpbGQuICAqLworLSAgICBfZXhpdChjbG9zZShmaWxlbm8oc3Rkb3V0KSkgIT0gMCk7CistICB9IGVsc2UgeworLSAgICBpbnQgc3RhdHVzOworLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKy0KKy0gICAgd2hpbGUgKHdhaXQoJnN0YXR1cykgIT0gY2hpbGQpCistICAgICAgOworLSAgICByZXR1cm4gKAorLQkgLyogV2FzIHRoZXJlIHNvbWUgcHJvYmxlbSB3aXRoIHZmb3JraW5nPyAgKi8KKy0JIGNoaWxkIDwgMAorLQorLQkgLyogRGlkIHRoZSBjaGlsZCBmYWlsPyAgKFRoaXMgc2hvdWxkbid0IGhhcHBlbi4pICAqLworLQkgfHwgc3RhdHVzCistCistCSAvKiBEaWQgdGhlIHZmb3JrL2NvbXBpbGVyIGJ1ZyBvY2N1cj8gICovCistCSB8fCBwYXJlbnQgIT0gZ2V0cGlkKCkKKy0KKy0JIC8qIERpZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1ZyBvY2N1cj8gICovCistCSB8fCBmc3RhdChmaWxlbm8oc3Rkb3V0KSwgJnN0KSAhPSAwCistCSApOworLSAgfQorK3JldHVybiBvcGVuZGlyICgpOworKyAgOworKyAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfdHJ5IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3ZfZnVuY192Zm9ya193b3Jrcz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSggZXhpdCAkYWNfc3RhdHVzICkKKy1hY19jdl9mdW5jX3Zmb3JrX3dvcmtzPW5vCistZmkKKy1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLQorLQorK2ZvciBhY19saWIgaW4gJycgeDsgZG8KKysgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisrICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKysgIGVsc2UKKysgICAgYWNfcmVzPS1sJGFjX2xpYgorKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisrICBmaQorKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9JGFjX3JlcworIGZpCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNjsgfQorLQorLWZpOworLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgorLSAgYWNfY3ZfZnVuY192Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yaworLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICBjb25mdGVzdCRhY19leGVleHQKKysgIGlmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorKyAgYnJlYWsKKyBmaQorLQorLWlmIHRlc3QgIngkYWNfY3ZfZnVuY192Zm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfV09SS0lOR19WRk9SSyAxCistX0FDRU9GCisrZG9uZQorK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorIAorIGVsc2UKKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgdmZvcmsgZm9yaworLV9BQ0VPRgorLQorLWZpCistaWYgdGVzdCAieCRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID0geHllczsgdGhlbgorLQorLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCistI2RlZmluZSBIQVZFX1dPUktJTkdfRk9SSyAxCistX0FDRU9GCistCisrICBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworIGZpCistCistCistCistZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaCB1bmlzdGQuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytybSBjb25mdGVzdC4kYWNfZXh0CisrTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistZWxzZQorLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CistY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY2OyB9CisrYWNfcmVzPSRhY19jdl9zZWFyY2hfb3BlbmRpcgorK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKysgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKytmaQorIAorLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgorLV9BQ0VPRgorLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfTsgdGhlbgorLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5Li4uICIgPiY2OyB9CisraWYgJHthY19jdl9oZWFkZXJfc3RkYm9vbF9oKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKy1maQorKyAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorKyAgICAgICAgICAgICAjaWZuZGVmIGJvb2wKKysgICAgICAgICAgICAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKysgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICNpZm5kZWYgZmFsc2UKKysgICAgICAgICAgICAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrICAgICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgICAjaWYgZmFsc2UKKysgICAgICAgICAgICAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisrICAgICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgICAjaWZuZGVmIHRydWUKKysgICAgICAgICAgICAgICJlcnJvcjogdHJ1ZSBpcyBub3QgZGVmaW5lZCIKKysgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICNpZiB0cnVlICE9IDEKKysgICAgICAgICAgICAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKysgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKysgICAgICAgICAgICAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisrICAgICAgICAgICAgICNlbmRpZgorKworKyAgICAgICAgICAgICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKysKKysgICAgICAgICAgICAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisrICAgICAgICAgICAgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKysgICAgICAgICAgICAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworKyAgICAgICAgICAgICBjaGFyIGRbKGJvb2wpIDAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKysgICAgICAgICAgICAgLyogU2VlIGJvZHkgb2YgbWFpbiBwcm9ncmFtIGZvciAnZScuICAqLworKyAgICAgICAgICAgICBjaGFyIGZbKF9Cb29sKSAwLjAgPT0gZmFsc2UgPyAxIDogLTFdOworKyAgICAgICAgICAgICBjaGFyIGdbdHJ1ZV07CisrICAgICAgICAgICAgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisrICAgICAgICAgICAgIGNoYXIgaVtzaXplb2Ygcy50XTsKKysgICAgICAgICAgICAgZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBmYWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07CisrICAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgZmFpbHMgZm9yCisrICAgICAgICAgICAgICAgIEhQIGFDKysvQU5TSSBDIEIzOTEwQiBBLjA1LjU1IFtEZWMgMDQgMjAwM10uICovCisrICAgICAgICAgICAgIF9Cb29sIG5bbV07CisrICAgICAgICAgICAgIGNoYXIgb1tzaXplb2YgbiA9PSBtICogc2l6ZW9mIG5bMF0gPyAxIDogLTFdOworKyAgICAgICAgICAgICBjaGFyIHBbLTEgLSAoX0Jvb2wpIDAgPCAwICYmIC0xIC0gKGJvb2wpIDAgPCAwID8gMSA6IC0xXTsKKysgICAgICAgICAgICAgLyogQ2F0Y2ggYSBidWcgaW4gYW4gSFAtVVggQyBjb21waWxlci4gIFNlZQorKyAgICAgICAgICAgICAgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCisrICAgICAgICAgICAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTEvbXNnMDAxNjEuaHRtbAorKyAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgX0Jvb2wgcSA9IHRydWU7CisrICAgICAgICAgICAgIF9Cb29sICpwcSA9ICZxOworIAorLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisraW50CisrbWFpbiAoKQorK3sKKyAKKy0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCistICB5ZXM6bm86ICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CistICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworLSAgICA7OworLSAgbm86eWVzOiogKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CistICAgICggY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJmdWxnaGFtQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLWVzYWMKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorKyAgICAgICAgICAgICBib29sIGUgPSAmczsKKysgICAgICAgICAgICAgKnBxIHw9IHE7CisrICAgICAgICAgICAgICpwcSB8PSAhIHE7CisrICAgICAgICAgICAgIC8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zLiAgKi8KKysgICAgICAgICAgICAgcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWkgKyAhIWogKyAhayArICEhbAorKyAgICAgICAgICAgICAgICAgICAgICsgIW0gKyAhbiArICFvICsgIXAgKyAhcSArICFwcSk7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXMKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisrICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQorKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2OyB9CisrICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiX0Jvb2wiICJhY19jdl90eXBlX19Cb29sIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl90eXBlX19Cb29sIiA9IHh5ZXM7IHRoZW4gOgorIAorLWZpCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9fQk9PTCAxCisrX0FDRU9GCisgCistZG9uZQorIAorK2ZpCisgCistZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorIAorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEiID4+Y29uZmRlZnMuaAorIAorLSN1bmRlZiAkYWNfZnVuYworK2ZpCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxmbG9hdC5oPgorIAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuICRhY19mdW5jICgpOworKworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKysgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyBfQUNFT0YKKytpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisrICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAKKytlbHNlCisrICBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistZG9uZQorK3JtIC1mIGNvbmZ0ZXN0KgorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbW1hcC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKy0gIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrZmkKKysKKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0kYWNfaW5jbHVkZXNfZGVmYXVsdAorLS8qIG1hbGxvYyBtaWdodCBoYXZlIGJlZW4gcmVuYW1lZCBhcyBycGxfbWFsbG9jLiAqLworLSN1bmRlZiBtYWxsb2MKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCistLyogVGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCistICAgSGVyZSBpcyBhIG1hdHJpeCBvZiBtbWFwIHBvc3NpYmlsaXRpZXM6CistCW1tYXAgcHJpdmF0ZSBub3QgZml4ZWQKKy0JbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKy0JbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorLQltbWFwIHNoYXJlZCBub3QgZml4ZWQKKy0JbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAorLQltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBwZWQKKy0gICBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgd2Ugc2hvdWxkIHZlcmlmeSB0aGF0IGNoYW5nZXMgY2Fubm90IGJlIHJlYWQoKQorLSAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBiYWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKKy0gICBhZGRyZXNzLiAgKFRoZXJlIGhhdmUgYmVlbiBzeXN0ZW1zIHdoZXJlIHByaXZhdGUgd2FzIG5vdCBjb3JyZWN0bHkKKy0gICBpbXBsZW1lbnRlZCBsaWtlIHRoZSBpbmZhbW91cyBpMzg2IHN2cjQuMCwgYW5kIHN5c3RlbXMgd2hlcmUgdGhlCistICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlciBjYWNoZQorLSAgIGxpa2UgZWFybHkgdmVyc2lvbnMgb2YgRnJlZUJTRCBhbmQgcG9zc2libHkgY29udGVtcG9yYXJ5IE5ldEJTRC4pCistICAgRm9yIHNoYXJlZCBtYXBwaW5ncywgd2Ugc2hvdWxkIGNvbnZlcnNlbHkgdmVyaWZ5IHRoYXQgY2hhbmdlcyBnZXQKKy0gICBwcm9wYWdhdGVkIGJhY2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KKytfQUNFT0YKKytpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisrICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgCistICAgR3JlcCB3YW50cyBwcml2YXRlIGZpeGVkIGFscmVhZHkgbWFwcGVkLgorLSAgIFRoZSBtYWluIHRoaW5ncyBncmVwIG5lZWRzIHRvIGtub3cgYWJvdXQgbW1hcCBhcmU6CistICAgKiBkb2VzIGl0IGV4aXN0IGFuZCBpcyBpdCBzYWZlIHRvIHdyaXRlIGludG8gdGhlIG1tYXAnZCBhcmVhCistICAgKiBob3cgdG8gdXNlIGl0IChCU0QgdmFyaWFudHMpICAqLworK2Vsc2UKKysgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCoKKyAKKy0jaW5jbHVkZSA8ZmNudGwuaD4KKy0jaW5jbHVkZSA8c3lzL21tYW4uaD4KKytmaQorIAorLSNpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgIWRlZmluZWQgSEFWRV9TVERMSUJfSAorLWNoYXIgKm1hbGxvYyAoKTsKKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorKyAgOgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKysjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisrIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorKyNlbHNlCisrIyBkZWZpbmUgSVNMT1dFUihjKSBcCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisgI2VuZGlmCisgCistLyogVGhpcyBtZXNzIHdhcyBjb3BpZWQgZnJvbSB0aGUgR05VIGdldHBhZ2VzaXplLmguICAqLworLSNpZm5kZWYgSEFWRV9HRVRQQUdFU0laRQorLS8qIEFzc3VtZSB0aGF0IGFsbCBzeXN0ZW1zIHRoYXQgY2FuIHJ1biBjb25maWd1cmUgaGF2ZSBzeXMvcGFyYW0uaC4gICovCistIyBpZm5kZWYgSEFWRV9TWVNfUEFSQU1fSAorLSMgIGRlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKy0jIGVuZGlmCistCistIyBpZmRlZiBfU0NfUEFHRVNJWkUKKy0jICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKKy0jIGVsc2UgLyogbm8gX1NDX1BBR0VTSVpFICovCistIyAgaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorLSMgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0jICAgaWZkZWYgRVhFQ19QQUdFU0laRQorLSMgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgRVhFQ19QQUdFU0laRQorLSMgICBlbHNlIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKy0jICAgIGlmZGVmIE5CUEcKKy0jICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBOQlBHICogQ0xTSVpFCistIyAgICAgaWZuZGVmIENMU0laRQorLSMgICAgICBkZWZpbmUgQ0xTSVpFIDEKKy0jICAgICBlbmRpZiAvKiBubyBDTFNJWkUgKi8KKy0jICAgIGVsc2UgLyogbm8gTkJQRyAqLworLSMgICAgIGlmZGVmIE5CUEMKKy0jICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQQworLSMgICAgIGVsc2UgLyogbm8gTkJQQyAqLworLSMgICAgICBpZmRlZiBQQUdFU0laRQorLSMgICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgUEFHRVNJWkUKKy0jICAgICAgZW5kaWYgLyogUEFHRVNJWkUgKi8KKy0jICAgICBlbmRpZiAvKiBubyBOQlBDICovCistIyAgICBlbmRpZiAvKiBubyBOQlBHICovCistIyAgIGVuZGlmIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKy0jICBlbHNlIC8qIG5vIEhBVkVfU1lTX1BBUkFNX0ggKi8KKy0jICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgODE5MgkvKiBwdW50IHRvdGFsbHkgKi8KKy0jICBlbmRpZiAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCistIyBlbmRpZiAvKiBubyBfU0NfUEFHRVNJWkUgKi8KKy0KKy0jZW5kaWYgLyogbm8gSEFWRV9HRVRQQUdFU0laRSAqLworLQorKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCisgaW50CisgbWFpbiAoKQorIHsKKy0gIGNoYXIgKmRhdGEsICpkYXRhMiwgKmRhdGEzOworLSAgaW50IGksIHBhZ2VzaXplOworLSAgaW50IGZkOworLQorLSAgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSAoKTsKKy0KKy0gIC8qIEZpcnN0LCBtYWtlIGEgZmlsZSB3aXRoIHNvbWUga25vd24gZ2FyYmFnZSBpbiBpdC4gKi8KKy0gIGRhdGEgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKy0gIGlmICghZGF0YSkKKy0gICAgcmV0dXJuIDE7CistICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKy0gICAgKihkYXRhICsgaSkgPSByYW5kICgpOworLSAgdW1hc2sgKDApOworLSAgZmQgPSBjcmVhdCAoImNvbmZ0ZXN0Lm1tYXAiLCAwNjAwKTsKKy0gIGlmIChmZCA8IDApCistICAgIHJldHVybiAxOworLSAgaWYgKHdyaXRlIChmZCwgZGF0YSwgcGFnZXNpemUpICE9IHBhZ2VzaXplKQorLSAgICByZXR1cm4gMTsKKy0gIGNsb3NlIChmZCk7CisrICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKysgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKysgICAgICByZXR1cm4gMjsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy0gIC8qIE5leHQsIHRyeSB0byBtbWFwIHRoZSBmaWxlIGF0IGEgZml4ZWQgYWRkcmVzcyB3aGljaCBhbHJlYWR5IGhhcworLSAgICAgc29tZXRoaW5nIGVsc2UgYWxsb2NhdGVkIGF0IGl0LiAgSWYgd2UgY2FuLCBhbHNvIG1ha2Ugc3VyZSB0aGF0CistICAgICB3ZSBzZWUgdGhlIHNhbWUgZ2FyYmFnZS4gICovCistICBmZCA9IG9wZW4gKCJjb25mdGVzdC5tbWFwIiwgT19SRFdSKTsKKy0gIGlmIChmZCA8IDApCistICAgIHJldHVybiAxOworLSAgZGF0YTIgPSAoY2hhciAqKSBtYWxsb2MgKDIgKiBwYWdlc2l6ZSk7CistICBpZiAoIWRhdGEyKQorLSAgICByZXR1cm4gMTsKKy0gIGRhdGEyICs9IChwYWdlc2l6ZSAtICgobG9uZyBpbnQpIGRhdGEyICYgKHBhZ2VzaXplIC0gMSkpKSAmIChwYWdlc2l6ZSAtIDEpOworLSAgaWYgKGRhdGEyICE9IG1tYXAgKGRhdGEyLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKy0JCSAgICAgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIGZkLCAwTCkpCistICAgIHJldHVybiAxOworLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCistICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEyICsgaSkpCistICAgICAgcmV0dXJuIDE7CisrZWxzZQorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKytmaQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKysgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyAKKy0gIC8qIEZpbmFsbHksIG1ha2Ugc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhlIG1hcHBlZCBhcmVhIGRvIG5vdAorLSAgICAgcGVyY29sYXRlIGJhY2sgdG8gdGhlIGZpbGUgYXMgc2VlbiBieSByZWFkKCkuICAoVGhpcyBpcyBhIGJ1ZyBvbgorLSAgICAgc29tZSB2YXJpYW50cyBvZiBpMzg2IHN2cjQuMC4pICAqLworLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCistICAgICooZGF0YTIgKyBpKSA9ICooZGF0YTIgKyBpKSArIDE7CistICBkYXRhMyA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOworLSAgaWYgKCFkYXRhMykKKy0gICAgcmV0dXJuIDE7CistICBpZiAocmVhZCAoZmQsIGRhdGEzLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCistICAgIHJldHVybiAxOworLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCistICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEzICsgaSkpCistICAgICAgcmV0dXJuIDE7CistICBjbG9zZSAoZmQpOworK2ZpCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9oZWFkZXJfdGltZSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrCisraW50CisrbWFpbiAoKQorK3sKKytpZiAoKHN0cnVjdCB0bSAqKSAwKQorK3JldHVybiAwOworKyAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfdHJ5IikgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXMKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9oZWFkZXJfdGltZT15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLSggZXhpdCAkYWNfc3RhdHVzICkKKy1hY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCisrICBhY19jdl9oZWFkZXJfdGltZT1ubworIGZpCistcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgorIAorKyRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjY7IH0KKy1pZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkID0geWVzOyB0aGVuCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIEhBVkVfTU1BUCAxCisrCisrZm9yIGFjX2hlYWRlciBpbiBhbGxvY2EuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJhbGxvY2EuaCIgImFjX2N2X2hlYWRlcl9hbGxvY2FfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2FsbG9jYV9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisgX0FDRU9GCisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC5tbWFwCisgCisrZG9uZQorIAorK2ZvciBhY19oZWFkZXIgaW4gYXJwYS9uYW1lc2VyLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiYXJwYS9uYW1lc2VyLmgiICJhY19jdl9oZWFkZXJfYXJwYV9uYW1lc2VyX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9hcnBhX25hbWVzZXJfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfQVJQQV9OQU1FU0VSX0ggMQorK19BQ0VPRgorIAorLWZvciBhY19oZWFkZXIgaW4gc3lzL3NlbGVjdC5oIHN5cy9zb2NrZXQuaAorLWRvCistYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1lbHNlCistICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KKy1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLSRhY19pbmNsdWRlc19kZWZhdWx0CistI2luY2x1ZGUgPCRhY19oZWFkZXI+CisrCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gYXNzZXJ0LmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiYXNzZXJ0LmgiICJhY19jdl9oZWFkZXJfYXNzZXJ0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9hc3NlcnRfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfQVNTRVJUX0ggMQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCistICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKytkb25lCisgCistIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPCRhY19oZWFkZXI+CisrZm9yIGFjX2hlYWRlciBpbiBkbnNfc2QuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJkbnNfc2QuaCIgImFjX2N2X2hlYWRlcl9kbnNfc2RfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2Ruc19zZF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9ETlNfU0RfSCAxCisgX0FDRU9GCistaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CistCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9OyB0aGVuCistICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisgZmkKKyAKKy1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIGVycm5vLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZXJybm8uaCIgImFjX2N2X2hlYWRlcl9lcnJub19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZXJybm9faCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfRVJSTk9fSCAxCisrX0FDRU9GCisgCistIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorLSAgeWVzOm5vOiApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKy0gICAgOzsKKy0gIG5vOnllczoqICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorLSAgICAoIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy1lc2FjCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisrCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gZmNudGwuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJmY250bC5oIiAiYWNfY3ZfaGVhZGVyX2ZjbnRsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9mY250bF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKKytfQUNFT0YKKyAKKyBmaQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKysKKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiBsaW1pdHMuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaW1pdHMuaCIgImFjX2N2X2hlYWRlcl9saW1pdHNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbWl0c19oIiA9IHh5ZXM7IHRoZW4gOgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKKyBfQUNFT0YKKyAKKyBmaQorIAorIGRvbmUKKyAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0eXBlcyBvZiBhcmd1bWVudHMgZm9yIHNlbGVjdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyB0eXBlcyBvZiBhcmd1bWVudHMgZm9yIHNlbGVjdC4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgZm9yIGFjX2FyZzIzNCBpbiAnZmRfc2V0IConICdpbnQgKicgJ3ZvaWQgKic7IGRvCistIGZvciBhY19hcmcxIGluICdpbnQnICdzaXplX3QnICd1bnNpZ25lZCBsb25nIGludCcgJ3Vuc2lnbmVkIGludCc7IGRvCistICBmb3IgYWNfYXJnNSBpbiAnc3RydWN0IHRpbWV2YWwgKicgJ2NvbnN0IHN0cnVjdCB0aW1ldmFsIConOyBkbworLSAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2ZvciBhY19oZWFkZXIgaW4gbG9jYWxlLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibG9jYWxlLmgiICJhY19jdl9oZWFkZXJfbG9jYWxlX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9sb2NhbGVfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy0jaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKy0jIGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKy0jZW5kaWYKKy0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKy0jIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jZW5kaWYKKyAKKy1pbnQKKy1tYWluICgpCisteworLWV4dGVybiBpbnQgc2VsZWN0ICgkYWNfYXJnMSwKKy0JCQkJCSAgICAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LAorLQkJCQkJICAgICRhY19hcmc1KTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytmaQorKworK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIG1hbGxvYy5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1hbGxvYy5oIiAiYWNfY3ZfaGVhZGVyX21hbGxvY19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWFsbG9jX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX01BTExPQ19IIDEKKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorLSAgYWNfY3ZfZnVuY19zZWxlY3RfYXJncz0iJGFjX2FyZzEsJGFjX2FyZzIzNCwkYWNfYXJnNSI7IGJyZWFrIDMKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKytmaQorKworK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIG1hbGxvYy9tYWxsb2MuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJtYWxsb2MvbWFsbG9jLmgiICJhY19jdl9oZWFkZXJfbWFsbG9jX21hbGxvY19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWFsbG9jX21hbGxvY19oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9NQUxMT0NfTUFMTE9DX0ggMQorK19BQ0VPRgorIAorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CistICBkb25lCistIGRvbmUKKyBkb25lCistIyBQcm92aWRlIGEgc2FmZSBkZWZhdWx0IHZhbHVlLgorLTogJHthY19jdl9mdW5jX3NlbGVjdF9hcmdzPSdpbnQsaW50ICosc3RydWN0IHRpbWV2YWwgKid9CisrCisrZm9yIGFjX2hlYWRlciBpbiBuZXRpbmV0L2luLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmV0aW5ldC9pbi5oIiAiYWNfY3ZfaGVhZGVyX25ldGluZXRfaW5faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGluZXRfaW5faCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIDEKKytfQUNFT0YKKyAKKyBmaQorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiA+JjY7IH0KKy1hY19zYXZlX0lGUz0kSUZTOyBJRlM9JywnCistc2V0IGR1bW15IGBlY2hvICIkYWNfY3ZfZnVuY19zZWxlY3RfYXJncyIgfCBzZWQgJ3MvXCovXCovZydgCistSUZTPSRhY19zYXZlX0lGUworLXNoaWZ0CisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSAkMQorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIG9iamMvb2JqYy5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm9iamMvb2JqYy5oIiAiYWNfY3ZfaGVhZGVyX29iamNfb2JqY19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb2JqY19vYmpjX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX09CSkNfT0JKQ19IIDEKKyBfQUNFT0YKKyAKKytmaQorKworK2RvbmUKKyAKKy1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgKCQyKQorK2ZvciBhY19oZWFkZXIgaW4gb2JqYy9ydW50aW1lLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAib2JqYy9ydW50aW1lLmgiICJhY19jdl9oZWFkZXJfb2JqY19ydW50aW1lX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vYmpjX3J1bnRpbWVfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfT0JKQ19SVU5USU1FX0ggMQorIF9BQ0VPRgorIAorK2ZpCisgCistY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHNSAoJDMpCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gcG9sbC5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInBvbGwuaCIgImFjX2N2X2hlYWRlcl9wb2xsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wb2xsX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1BPTExfSCAxCisgX0FDRU9GCisgCistcm0gLWYgY29uZnRlc3QqCisrZmkKKysKKytkb25lCisgCisrZm9yIGFjX2hlYWRlciBpbiBwd2QuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJwd2QuaCIgImFjX2N2X2hlYWRlcl9wd2RfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3B3ZF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9QV0RfSCAxCisrX0FDRU9GCisgCisrZmkKKyAKKy1mb3IgYWNfZnVuYyBpbiBnZXRjd2QKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIHNlbWFwaG9yZS5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInNlbWFwaG9yZS5oIiAiYWNfY3ZfaGVhZGVyX3NlbWFwaG9yZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc2VtYXBob3JlX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1NFTUFQSE9SRV9IIDEKKyBfQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisgCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworK2ZpCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisrZG9uZQorIAorLSN1bmRlZiAkYWNfZnVuYworK2ZvciBhY19oZWFkZXIgaW4gc2V0am1wLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic2V0am1wLmgiICJhY19jdl9oZWFkZXJfc2V0am1wX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zZXRqbXBfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMQorK19BQ0VPRgorIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrZmkKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiBzaWduYWwuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzaWduYWwuaCIgImFjX2N2X2hlYWRlcl9zaWduYWxfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3NpZ25hbF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisrX0FDRU9GCisrCisrZmkKKysKKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiBzdGRhcmcuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdGRhcmcuaCIgImFjX2N2X2hlYWRlcl9zdGRhcmdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGFyZ19oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVERBUkdfSCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiBzdGRib29sLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkYm9vbC5oIiAiYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSB4eWVzOyB0aGVuIDoKKyAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKysjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKyBfQUNFT0YKKyAKKyBmaQorLWRvbmUKKyAKKytkb25lCisgCistZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdG5hbWUKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2ZvciBhY19oZWFkZXIgaW4gc3RkZGVmLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkZGVmLmgiICJhY19jdl9oZWFkZXJfc3RkZGVmX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdGRkZWZfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1REREVGX0ggMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrZmkKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytkb25lCisgCistI3VuZGVmICRhY19mdW5jCisrZm9yIGFjX2hlYWRlciBpbiBzdGRpbnQuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdGRpbnQuaCIgImFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisrX0FDRU9GCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytmaQorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIHN0ZGlvLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkaW8uaCIgImFjX2N2X2hlYWRlcl9zdGRpb19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW9faCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1RESU9fSCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKytkb25lCisrCisrZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdGRsaWIuaCIgImFjX2N2X2hlYWRlcl9zdGRsaWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oIiA9IHh5ZXM7IHRoZW4gOgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisgX0FDRU9GCisgCisgZmkKKysKKyBkb25lCisgCisrZm9yIGFjX2hlYWRlciBpbiBzdHJpbmcuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdHJpbmcuaCIgImFjX2N2X2hlYWRlcl9zdHJpbmdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0cmluZ19oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisrX0FDRU9GCisgCisrZmkKKyAKKy1mb3IgYWNfZnVuYyBpbiBtYWxsb2MgcmVhbGxvYworLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gc3lzbG9nLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzbG9nLmgiICJhY19jdl9oZWFkZXJfc3lzbG9nX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNsb2dfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1lTTE9HX0ggMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrZmkKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytkb25lCisgCistI3VuZGVmICRhY19mdW5jCisrZm9yIGFjX2hlYWRlciBpbiB0aW1lLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidGltZS5oIiAiYWNfY3ZfaGVhZGVyX3RpbWVfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3RpbWVfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVElNRV9IIDEKKytfQUNFT0YKKyAKKy0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKy0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKKy1jaG9rZSBtZQorLSNlbmRpZgorK2ZpCisgCistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gJGFjX2Z1bmMgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gdW5pc3RkLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pc3RkLmgiICJhY19jdl9oZWFkZXJfdW5pc3RkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmlzdGRfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4geGxvY2FsZS5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInhsb2NhbGUuaCIgImFjX2N2X2hlYWRlcl94bG9jYWxlX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl94bG9jYWxlX2giID0geHllczsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBIQVZFX1hMT0NBTEVfSCAxCisgX0FDRU9GCisgCisgZmkKKy1kb25lCisgCisrZG9uZQorIAorK2ZvciBhY19oZWFkZXIgaW4gc3lzL2NkZWZzLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL2NkZWZzLmgiICJhY19jdl9oZWFkZXJfc3lzX2NkZWZzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfY2RlZnNfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1lTX0NERUZTX0ggMQorK19BQ0VPRgorIAorK2ZpCisgCisrZG9uZQorIAorLWZvciBhY19mdW5jIGluIG1lbWNociBtZW1jbXAgbWVtbW92ZSBtZW1zZXQKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2ZvciBhY19oZWFkZXIgaW4gc3lzL2Vycm5vLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL2Vycm5vLmgiICJhY19jdl9oZWFkZXJfc3lzX2Vycm5vX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfZXJybm9faCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1lTX0VSUk5PX0ggMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrZmkKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytkb25lCisgCistI3VuZGVmICRhY19mdW5jCisrZm9yIGFjX2hlYWRlciBpbiBzeXMvZmNudGwuaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvZmNudGwuaCIgImFjX2N2X2hlYWRlcl9zeXNfZmNudGxfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19mY250bF9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TWVNfRkNOVExfSCAxCisrX0FDRU9GCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytmaQorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIHN5cy9pb2N0bC5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9pb2N0bC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19pb2N0bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2lvY3RsX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEKKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIHN5cy9tbWFuLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL21tYW4uaCIgImFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPSB4eWVzOyB0aGVuIDoKKyAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKysjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisgX0FDRU9GCisgCisgZmkKKysKKyBkb25lCisgCisrZm9yIGFjX2hlYWRlciBpbiBzeXMvcGFyYW0uaAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvcGFyYW0uaCIgImFjX2N2X2hlYWRlcl9zeXNfcGFyYW1faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19wYXJhbV9oIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCisrX0FDRU9GCisrCisrZmkKKyAKKy1mb3IgYWNfZnVuYyBpbiBta2RpcgorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gc3lzL3NvY2tldC5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9zb2NrZXQuaCIgImFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisgX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKytmaQorIAorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorK2RvbmUKKyAKKy0jdW5kZWYgJGFjX2Z1bmMKKytmb3IgYWNfaGVhZGVyIGluIHN5cy9zdGF0LmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3N0YXQuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3RhdF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3N0YXRfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisrX0FDRU9GCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytmaQorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIHN5cy90aW1lLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3RpbWUuaCIgImFjX2N2X2hlYWRlcl9zeXNfdGltZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3RpbWVfaCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK2RvbmUKKysKKytmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy90eXBlcy5oIiAiYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2giID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKytfQUNFT0YKKysKKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrCisrZG9uZQorKworK2ZvciBhY19oZWFkZXIgaW4gc3lzL3Vpby5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy91aW8uaCIgImFjX2N2X2hlYWRlcl9zeXNfdWlvX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfdWlvX2giID0geHllczsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBIQVZFX1NZU19VSU9fSCAxCisgX0FDRU9GCisgCisgZmkKKysKKyBkb25lCisgCisgCistZm9yIGFjX2Z1bmMgaW4gbXVubWFwCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKysjCisrIyBDaGVja3MgZm9yIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzCisrIworK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICI4IiAiYWNfY3ZfY19pbnQ4X3QiCisrY2FzZSAkYWNfY3ZfY19pbnQ4X3QgaW4gIygKKysgIG5vfHllcykgOzsgIygKKysgICopCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgaW50OF90ICRhY19jdl9jX2ludDhfdAorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKys7OworK2VzYWMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjE2IiAiYWNfY3ZfY19pbnQxNl90IgorK2Nhc2UgJGFjX2N2X2NfaW50MTZfdCBpbiAjKAorKyAgbm98eWVzKSA7OyAjKAorKyAgKikKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBpbnQxNl90ICRhY19jdl9jX2ludDE2X3QKKytfQUNFT0YKKys7OworK2VzYWMKKysKKythY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiMzIiICJhY19jdl9jX2ludDMyX3QiCisrY2FzZSAkYWNfY3ZfY19pbnQzMl90IGluICMoCisrICBub3x5ZXMpIDs7ICMoCisrICAqKQorIAorLSN1bmRlZiAkYWNfZnVuYworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIGludDMyX3QgJGFjX2N2X2NfaW50MzJfdAorK19BQ0VPRgorKzs7CisrZXNhYworIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjY0IiAiYWNfY3ZfY19pbnQ2NF90IgorK2Nhc2UgJGFjX2N2X2NfaW50NjRfdCBpbiAjKAorKyAgbm98eWVzKSA7OyAjKAorKyAgKikKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBpbnQ2NF90ICRhY19jdl9jX2ludDY0X3QKKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKys7OworIGVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKysKKythY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJtb2RlX3QiICJhY19jdl90eXBlX21vZGVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9tb2RlX3QiID0geHllczsgdGhlbiA6CisrCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCistZmkKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBtb2RlX3QgaW50CisrX0FDRU9GCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKysKKythY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJvZmZfdCIgImFjX2N2X3R5cGVfb2ZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfb2ZmX3QiID0geHllczsgdGhlbiA6CisrCisrZWxzZQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIG9mZl90IGxvbmcgaW50CisgX0FDRU9GCisgCisgZmkKKy1kb25lCisgCisrYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicGlkX3QiICJhY19jdl90eXBlX3BpZF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl90eXBlX3BpZF90IiA9IHh5ZXM7IHRoZW4gOgorIAorLWZvciBhY19mdW5jIGluIHJtZGlyCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrZWxzZQorIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBwaWRfdCBpbnQKKytfQUNFT0YKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytmaQorIAorLSN1bmRlZiAkYWNfZnVuYworK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKKyAKKy0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKy0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKKy1jaG9rZSBtZQorLSNlbmRpZgorK2Vsc2UKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKythY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzc2l6ZV90IiAiYWNfY3ZfdHlwZV9zc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl90eXBlX3NzaXplX3QiID0geHllczsgdGhlbiA6CisrCisrZWxzZQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIHNzaXplX3QgaW50CisgX0FDRU9GCisgCisgZmkKKy1kb25lCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfdHlwZV91aWRfdCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorLWZvciBhY19mdW5jIGluIHNlbGVjdAorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKysgICRFR1JFUCAidWlkX3QiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICBhY19jdl90eXBlX3VpZF90PXllcworK2Vsc2UKKysgIGFjX2N2X3R5cGVfdWlkX3Q9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0KgorIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aWRfdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpZF90IiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl90eXBlX3VpZF90ID0gbm87IHRoZW4KKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKyskYXNfZWNobyAiI2RlZmluZSB1aWRfdCBpbnQiID4+Y29uZmRlZnMuaAorIAorLSN1bmRlZiAkYWNfZnVuYworIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrJGFzX2VjaG8gIiNkZWZpbmUgZ2lkX3QgaW50IiA+PmNvbmZkZWZzLmgKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytmaQorKworK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiOCIgImFjX2N2X2NfdWludDhfdCIKKytjYXNlICRhY19jdl9jX3VpbnQ4X3QgaW4gIygKKysgIG5vfHllcykgOzsgIygKKysgICopCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQ4X1QgMSIgPj5jb25mZGVmcy5oCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgdWludDhfdCAkYWNfY3ZfY191aW50OF90CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKzs7CisrICBlc2FjCisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCistZmkKKythY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjE2IiAiYWNfY3ZfY191aW50MTZfdCIKKytjYXNlICRhY19jdl9jX3VpbnQxNl90IGluICMoCisrICBub3x5ZXMpIDs7ICMoCisrICAqKQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgdWludDE2X3QgJGFjX2N2X2NfdWludDE2X3QKKyBfQUNFT0YKKys7OworKyAgZXNhYworIAorLWZpCistZG9uZQorK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiMzIiICJhY19jdl9jX3VpbnQzMl90IgorK2Nhc2UgJGFjX2N2X2NfdWludDMyX3QgaW4gIygKKysgIG5vfHllcykgOzsgIygKKysgICopCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQzMl9UIDEiID4+Y29uZmRlZnMuaAorIAorLWZvciBhY19mdW5jIGluIHNldGVudgorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgdWludDMyX3QgJGFjX2N2X2NfdWludDMyX3QKKyBfQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrOzsKKysgIGVzYWMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICI2NCIgImFjX2N2X2NfdWludDY0X3QiCisrY2FzZSAkYWNfY3ZfY191aW50NjRfdCBpbiAjKAorKyAgbm98eWVzKSA7OyAjKAorKyAgKikKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKyskYXNfZWNobyAiI2RlZmluZSBfVUlOVDY0X1QgMSIgPj5jb25mZGVmcy5oCisgCistI3VuZGVmICRhY19mdW5jCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSB1aW50NjRfdCAkYWNfY3ZfY191aW50NjRfdAorK19BQ0VPRgorKzs7CisrICBlc2FjCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cnVjdCB0bSBpcyBpbiBzeXMvdGltZS5oIG9yIHRpbWUuaCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJ1Y3QgdG0gaXMgaW4gc3lzL3RpbWUuaCBvciB0aW1lLmguLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X3N0cnVjdF90bSs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisgCisgaW50CisgbWFpbiAoKQorIHsKKy1yZXR1cm4gJGFjX2Z1bmMgKCk7Cisrc3RydWN0IHRtIHRtOworKwkJCQkgICAgIGludCAqcCA9ICZ0bS50bV9zZWM7CisrCQkJCSAgICAgcmV0dXJuICFwOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9zdHJ1Y3RfdG09dGltZS5oCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWV2YWwgIiRhc19hY192YXI9bm8iCisrICBhY19jdl9zdHJ1Y3RfdG09c3lzL3RpbWUuaAorIGZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N0cnVjdF90bSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9zdHJ1Y3RfdG0iID4mNjsgfQorK2lmIHRlc3QgJGFjX2N2X3N0cnVjdF90bSA9IHN5cy90aW1lLmg7IHRoZW4KKysKKyskYXNfZWNobyAiI2RlZmluZSBUTV9JTl9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKKyAKKyBmaQorLWRvbmUKKyAKKythY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB0bSIgInRtX3pvbmUiICJhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPCRhY19jdl9zdHJ1Y3RfdG0+CisgCistZm9yIGFjX2Z1bmMgaW4gc29ja2V0CistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKysiCisraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geHllczsgdGhlbiA6CisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1fVE1fWk9ORSAxCisgX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytmaQorIAorLSN1bmRlZiAkYWNfZnVuYworK2lmIHRlc3QgIiRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geWVzOyB0aGVuCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKyskYXNfZWNobyAiI2RlZmluZSBIQVZFX1RNX1pPTkUgMSIgPj5jb25mZGVmcy5oCisrCisrZWxzZQorKyAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAidHpuYW1lIiAiYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZSIgIiNpbmNsdWRlIDx0aW1lLmg+CisrIgorK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZSIgPSB4eWVzOyB0aGVuIDoKKysgIGFjX2hhdmVfZGVjbD0xCisrZWxzZQorKyAgYWNfaGF2ZV9kZWNsPTAKKytmaQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfREVDTF9UWk5BTUUgJGFjX2hhdmVfZGVjbAorK19BQ0VPRgorKworKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHpuYW1lIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdHpuYW1lLi4uICIgPiY2OyB9CisraWYgJHthY19jdl92YXJfdHpuYW1lKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8dGltZS5oPgorKyNpZiAhSEFWRV9ERUNMX1RaTkFNRQorK2V4dGVybiBjaGFyICp0em5hbWVbXTsKKyAjZW5kaWYKKyAKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiAkYWNfZnVuYyAoKTsKKytyZXR1cm4gdHpuYW1lWzBdWzBdOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl92YXJfdHpuYW1lPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorLWZpCistCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgYWNfY3ZfdmFyX3R6bmFtZT1ubworIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKy0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLWRvbmUKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Zhcl90em5hbWUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdmFyX3R6bmFtZSIgPiY2OyB9CisrICBpZiB0ZXN0ICRhY19jdl92YXJfdHpuYW1lID0geWVzOyB0aGVuCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9UWk5BTUUgMSIgPj5jb25mZGVmcy5oCisgCisrICBmaQorK2ZpCisgCisgCisrIworKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworKyMKKyAKKy1mb3IgYWNfZnVuYyBpbiBnZXRnaWQgZ2V0dWlkIGdldGVnaWQgZ2V0ZXVpZAorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKyMgVGhlIFVsdHJpeCA0LjIgbWlwcyBidWlsdGluIGFsbG9jYSBkZWNsYXJlZCBieSBhbGxvY2EuaCBvbmx5IHdvcmtzCisrIyBmb3IgY29uc3RhbnQgYXJndW1lbnRzLiAgVXNlbGVzcyEKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAiID4mNjsgfQorK2lmICR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKy0KKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCistCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCistCistI3VuZGVmICRhY19mdW5jCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKy0KKysjaW5jbHVkZSA8YWxsb2NhLmg+CisgaW50CisgbWFpbiAoKQorIHsKKy1yZXR1cm4gJGFjX2Z1bmMgKCk7CisrY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMiAqIHNpemVvZiAoaW50KSk7CisrCQkJICBpZiAocCkgcmV0dXJuIDA7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9eWVzCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWV2YWwgIiRhc19hY192YXI9bm8iCisrICBhY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCisgCistZmkKKy1kb25lCisrJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKytmaQorIAorLWZvciBhY19mdW5jIGluIGdldHBpZAorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCistCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLQorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyAjZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCistCistI3VuZGVmICRhY19mdW5jCistCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWZkZWYgSEFWRV9BTExPQ0FfSAorKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KKyt2b2lkICphbGxvY2EgKHNpemVfdCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbmRpZgorIAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuICRhY19mdW5jICgpOworK2NoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDEpOworKwkJCQkgICAgaWYgKHApIHJldHVybiAwOworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKytpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKysgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vCisgZmkKKy0KKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorLV9BQ0VPRgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQorIAorLWZpCistZG9uZQorK2lmIHRlc3QgJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzID0geWVzOyB0aGVuCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0EgMSIgPj5jb25mZGVmcy5oCisgCistZm9yIGFjX2Z1bmMgaW4gc3RyZXJyb3IKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKytlbHNlCisrICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucworKyMgdGhhdCBjYXVzZSB0cm91YmxlLiAgU29tZSB2ZXJzaW9ucyBkbyBub3QgZXZlbiBjb250YWluIGFsbG9jYSBvcgorKyMgY29udGFpbiBhIGJ1Z2d5IHZlcnNpb24uICBJZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgdGhlaXIgYWxsb2NhLAorKyMgdXNlIGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2YgY29tcGlsaW5nIGFsbG9jYS5jLgorIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKytBTExPQ0E9XCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0CisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyskYXNfZWNobyAiI2RlZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9vc19jcmF5Kzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWYgZGVmaW5lZCBDUkFZICYmICEgZGVmaW5lZCBDUkFZMgorK3dlYmVjcmF5CisgI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorK3dlbm90YmVjcmF5CisgI2VuZGlmCisgCistI3VuZGVmICRhY19mdW5jCisrX0FDRU9GCisraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorKyAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgIGFjX2N2X29zX2NyYXk9eWVzCisrZWxzZQorKyAgYWNfY3Zfb3NfY3JheT1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QqCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29zX2NyYXkiID4mNQorKyRhc19lY2hvICIkYWNfY3Zfb3NfY3JheSIgPiY2OyB9CisraWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgorKyAgZm9yIGFjX2Z1bmMgaW4gX2dldGI2NyBHRVRCNjcgZ2V0YjY3OyBkbworKyAgICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKythY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCisraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgQ1JBWV9TVEFDS1NFR19FTkQgJGFjX2Z1bmMKKytfQUNFT0YKKysKKysgICAgYnJlYWsKKytmaQorKworKyAgZG9uZQorK2ZpCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9jX3N0YWNrX2RpcmVjdGlvbis6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKysgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTAKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrZmluZF9zdGFja19kaXJlY3Rpb24gKGludCAqYWRkciwgaW50IGRlcHRoKQorK3sKKysgIGludCBkaXIsIGR1bW15ID0gMDsKKysgIGlmICghIGFkZHIpCisrICAgIGFkZHIgPSAmZHVtbXk7CisrICAqYWRkciA9IGFkZHIgPCAmZHVtbXkgPyAxIDogYWRkciA9PSAmZHVtbXkgPyAwIDogLTE7CisrICBkaXIgPSBkZXB0aCA/IGZpbmRfc3RhY2tfZGlyZWN0aW9uIChhZGRyLCBkZXB0aCAtIDEpIDogMDsKKysgIHJldHVybiBkaXIgKyBkdW1teTsKKyt9CisgCisgaW50CistbWFpbiAoKQorK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CisrICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKDAsIGFyZ2MgKyAhYXJndiArIDIwKSA8IDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKytpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTEKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPS0xCisrZmkKKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisrICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorK2ZpCisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjY7IH0KKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBTVEFDS19ESVJFQ1RJT04gJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uCisrX0FDRU9GCisrCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKysKKytmb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInVuaXN0ZC5oIiAiYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdW5pc3RkX2giID0geHllczsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKyBfQUNFT0YKKyAKKyBmaQorKworIGRvbmUKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGNob3duIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBjaG93bi4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfZnVuY19jaG93bl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKysgIGFjX2N2X2Z1bmNfY2hvd25fd29ya3M9bm8KKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgCisraW50CisrbWFpbiAoKQorK3sKKysgIGNoYXIgKmYgPSAiY29uZnRlc3QuY2hvd24iOworKyAgc3RydWN0IHN0YXQgYmVmb3JlLCBhZnRlcjsKKyAKKysgIGlmIChjcmVhdCAoZiwgMDYwMCkgPCAwKQorKyAgICByZXR1cm4gMTsKKysgIGlmIChzdGF0IChmLCAmYmVmb3JlKSA8IDApCisrICAgIHJldHVybiAxOworKyAgaWYgKGNob3duIChmLCAodWlkX3QpIC0xLCAoZ2lkX3QpIC0xKSA9PSAtMSkKKysgICAgcmV0dXJuIDE7CisrICBpZiAoc3RhdCAoZiwgJmFmdGVyKSA8IDApCisrICAgIHJldHVybiAxOworKyAgcmV0dXJuICEgKGJlZm9yZS5zdF91aWQgPT0gYWZ0ZXIuc3RfdWlkICYmIGJlZm9yZS5zdF9naWQgPT0gYWZ0ZXIuc3RfZ2lkKTsKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2Z1bmNfY2hvd25fd29ya3M9eWVzCisrZWxzZQorKyAgYWNfY3ZfZnVuY19jaG93bl93b3Jrcz1ubworK2ZpCisrcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKKytmaQorIAorK3JtIC1mIGNvbmZ0ZXN0LmNob3duCisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2hvd25fd29ya3MiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY19jaG93bl93b3JrcyIgPiY2OyB9CisraWYgdGVzdCAkYWNfY3ZfZnVuY19jaG93bl93b3JrcyA9IHllczsgdGhlbgorIAorKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0hPV04gMSIgPj5jb25mZGVmcy5oCisgCisrZmkKKyAKKy1mb3IgYWNfZnVuYyBpbiByaW50IHN0cmNociBzdHJkdXAgc3RycmNociBzdHJzdHIgc3RydG9kIHN0cnRvbCBzdHJ0b3VsCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNsb3NlZGlyIHJldHVybnMgdm9pZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBjbG9zZWRpciByZXR1cm5zIHZvaWQuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCs6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKysgIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCistCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLQorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorLQorLSN1bmRlZiAkYWNfZnVuYworLQorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKysjaW5jbHVkZSA8JGFjX2hlYWRlcl9kaXJlbnQ+CisrI2lmbmRlZiBfX2NwbHVzcGx1cworK2ludCBjbG9zZWRpciAoKTsKKyAjZW5kaWYKKyAKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiAkYWNfZnVuYyAoKTsKKytyZXR1cm4gY2xvc2VkaXIgKG9wZW5kaXIgKCIuIikpICE9IDA7CisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPW5vCisgZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrICBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisrZmkKKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisrICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorK2ZpCisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQiID4mNjsgfQorK2lmIHRlc3QgJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCA9IHllczsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIENMT1NFRElSX1ZPSUQgMSIgPj5jb25mZGVmcy5oCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKysKKytmb3IgYWNfaGVhZGVyIGluIHZmb3JrLmgKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidmZvcmsuaCIgImFjX2N2X2hlYWRlcl92Zm9ya19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCisraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdmZvcmtfaCIgPSB4eWVzOyB0aGVuIDoKKyAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKysjZGVmaW5lIEhBVkVfVkZPUktfSCAxCisgX0FDRU9GCisgCisgZmkKKysKKyBkb25lCisgCisrZm9yIGFjX2Z1bmMgaW4gZm9yayB2Zm9yaworK2RvIDoKKysgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorK19BQ0VPRgorIAorK2ZpCisrZG9uZQorIAorLWZvciBhY19mdW5jIGluIHN0cm5jbXAgc3RybmNhc2VjbXAKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKytpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9yayIgPSB4eWVzOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGZvcmsiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGZvcmsuLi4gIiA+JjY7IH0KKytpZiAke2FjX2N2X2Z1bmNfZm9ya193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKysgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1jcm9zcworK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisgCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKwkgIC8qIEJ5IFJ1ZWRpZ2VyIEt1aGxtYW5uLiAqLworKwkgIHJldHVybiBmb3JrICgpIDwgMDsKKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKysgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz15ZXMKKytlbHNlCisrICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9bm8KKytmaQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKysgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyAKKy0jdW5kZWYgJGFjX2Z1bmMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPiY2OyB9CisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCisrZWxzZQorKyAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPSRhY19jdl9mdW5jX2ZvcmsKKytmaQorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgorKyAgY2FzZSAkaG9zdCBpbgorKyAgICAqLSotYW1pZ2FvcyogfCAqLSotbXNkb3NkamdwcCopCisrICAgICAgIyBPdmVycmlkZSwgYXMgdGhlc2Ugc3lzdGVtcyBoYXZlIG9ubHkgYSBkdW1teSBmb3JrKCkgc3R1YgorKyAgICAgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1ubworKyAgICAgIDs7CisrICAgICopCisrICAgICAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPXllcworKyAgICAgIDs7CisrICBlc2FjCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHJlc3VsdCAkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX2Zvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQorK2ZpCisrYWNfY3ZfZnVuY192Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yaworK2lmIHRlc3QgIngkYWNfY3ZfZnVuY192Zm9yayIgPSB4eWVzOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHZmb3JrIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyB2Zm9yay4uLiAiID4mNjsgfQorK2lmICR7YWNfY3ZfZnVuY192Zm9ya193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKysgIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9Y3Jvc3MKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIFRoYW5rcyB0byBQYXVsIEVnZ2VydCBmb3IgdGhpcyB0ZXN0LiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorKyNpZmRlZiBIQVZFX1ZGT1JLX0gKKysjIGluY2x1ZGUgPHZmb3JrLmg+CisgI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKysvKiBPbiBzb21lIHNwYXJjIHN5c3RlbXMsIGNoYW5nZXMgYnkgdGhlIGNoaWxkIHRvIGxvY2FsIGFuZCBpbmNvbWluZworKyAgIGFyZ3VtZW50IHJlZ2lzdGVycyBhcmUgcHJvcGFnYXRlZCBiYWNrIHRvIHRoZSBwYXJlbnQuICBUaGUgY29tcGlsZXIKKysgICBpcyB0b2xkIGFib3V0IHRoaXMgd2l0aCAjaW5jbHVkZSA8dmZvcmsuaD4sIGJ1dCBzb21lIGNvbXBpbGVycworKyAgIChlLmcuIGdjYyAtTykgZG9uJ3QgZ3JvayA8dmZvcmsuaD4uICBUZXN0IGZvciB0aGlzIGJ5IHVzaW5nIGEKKysgICBzdGF0aWMgdmFyaWFibGUgd2hvc2UgYWRkcmVzcyBpcyBwdXQgaW50byBhIHJlZ2lzdGVyIHRoYXQgaXMKKysgICBjbG9iYmVyZWQgYnkgdGhlIHZmb3JrLiAgKi8KKytzdGF0aWMgdm9pZAorKyNpZmRlZiBfX2NwbHVzcGx1cworK3NwYXJjX2FkZHJlc3NfdGVzdCAoaW50IGFyZykKKysjIGVsc2UKKytzcGFyY19hZGRyZXNzX3Rlc3QgKGFyZykgaW50IGFyZzsKKyAjZW5kaWYKKyt7CisrICBzdGF0aWMgcGlkX3QgY2hpbGQ7CisrICBpZiAoIWNoaWxkKSB7CisrICAgIGNoaWxkID0gdmZvcmsgKCk7CisrICAgIGlmIChjaGlsZCA8IDApIHsKKysgICAgICBwZXJyb3IgKCJ2Zm9yayIpOworKyAgICAgIF9leGl0KDIpOworKyAgICB9CisrICAgIGlmICghY2hpbGQpIHsKKysgICAgICBhcmcgPSBnZXRwaWQoKTsKKysgICAgICB3cml0ZSgtMSwgIiIsIDApOworKyAgICAgIF9leGl0IChhcmcpOworKyAgICB9CisrICB9CisrfQorIAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CisrICBwaWRfdCBwYXJlbnQgPSBnZXRwaWQgKCk7CisrICBwaWRfdCBjaGlsZDsKKysKKysgIHNwYXJjX2FkZHJlc3NfdGVzdCAoMCk7CisrCisrICBjaGlsZCA9IHZmb3JrICgpOworKworKyAgaWYgKGNoaWxkID09IDApIHsKKysgICAgLyogSGVyZSBpcyBhbm90aGVyIHRlc3QgZm9yIHNwYXJjIHZmb3JrIHJlZ2lzdGVyIHByb2JsZW1zLiAgVGhpcworKyAgICAgICB0ZXN0IHVzZXMgbG90cyBvZiBsb2NhbCB2YXJpYWJsZXMsIGF0IGxlYXN0IGFzIG1hbnkgbG9jYWwKKysgICAgICAgdmFyaWFibGVzIGFzIG1haW4gaGFzIGFsbG9jYXRlZCBzbyBmYXIgaW5jbHVkaW5nIGNvbXBpbGVyCisrICAgICAgIHRlbXBvcmFyaWVzLiAgNCBsb2NhbHMgYXJlIGVub3VnaCBmb3IgZ2NjIDEuNDAuMyBvbiBhIFNvbGFyaXMKKysgICAgICAgNC4xLjMgc3BhcmMsIGJ1dCB3ZSB1c2UgOCB0byBiZSBzYWZlLiAgQSBidWdneSBjb21waWxlciBzaG91bGQKKysgICAgICAgcmV1c2UgdGhlIHJlZ2lzdGVyIG9mIHBhcmVudCBmb3Igb25lIG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMsCisrICAgICAgIHNpbmNlIGl0IHdpbGwgdGhpbmsgdGhhdCBwYXJlbnQgY2FuJ3QgcG9zc2libHkgYmUgdXNlZCBhbnkgbW9yZQorKyAgICAgICBpbiB0aGlzIHJvdXRpbmUuICBBc3NpZ25pbmcgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHdpbGwgdGh1cworKyAgICAgICBtdW5nZSBwYXJlbnQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgKi8KKysgICAgcGlkX3QKKysgICAgICBwID0gZ2V0cGlkKCksIHAxID0gZ2V0cGlkKCksIHAyID0gZ2V0cGlkKCksIHAzID0gZ2V0cGlkKCksCisrICAgICAgcDQgPSBnZXRwaWQoKSwgcDUgPSBnZXRwaWQoKSwgcDYgPSBnZXRwaWQoKSwgcDcgPSBnZXRwaWQoKTsKKysgICAgLyogQ29udmluY2UgdGhlIGNvbXBpbGVyIHRoYXQgcC4ucDcgYXJlIGxpdmU7IG90aGVyd2lzZSwgaXQgbWlnaHQKKysgICAgICAgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIHJlZ2lzdGVyIGZvciBhbGwgOCBsb2NhbCB2YXJpYWJsZXMuICAqLworKyAgICBpZiAocCAhPSBwMSB8fCBwICE9IHAyIHx8IHAgIT0gcDMgfHwgcCAhPSBwNAorKwl8fCBwICE9IHA1IHx8IHAgIT0gcDYgfHwgcCAhPSBwNykKKysgICAgICBfZXhpdCgxKTsKKysKKysgICAgLyogT24gc29tZSBzeXN0ZW1zIChlLmcuIElSSVggMy4zKSwgdmZvcmsgZG9lc24ndCBzZXBhcmF0ZSBwYXJlbnQKKysgICAgICAgZnJvbSBjaGlsZCBmaWxlIGRlc2NyaXB0b3JzLiAgSWYgdGhlIGNoaWxkIGNsb3NlcyBhIGRlc2NyaXB0b3IKKysgICAgICAgYmVmb3JlIGl0IGV4ZWNzIG9yIGV4aXRzLCB0aGlzIG11bmdlcyB0aGUgcGFyZW50J3MgZGVzY3JpcHRvcgorKyAgICAgICBhcyB3ZWxsLiAgVGVzdCBmb3IgdGhpcyBieSBjbG9zaW5nIHN0ZG91dCBpbiB0aGUgY2hpbGQuICAqLworKyAgICBfZXhpdChjbG9zZShmaWxlbm8oc3Rkb3V0KSkgIT0gMCk7CisrICB9IGVsc2UgeworKyAgICBpbnQgc3RhdHVzOworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKysgICAgd2hpbGUgKHdhaXQoJnN0YXR1cykgIT0gY2hpbGQpCisrICAgICAgOworKyAgICByZXR1cm4gKAorKwkgLyogV2FzIHRoZXJlIHNvbWUgcHJvYmxlbSB3aXRoIHZmb3JraW5nPyAgKi8KKysJIGNoaWxkIDwgMAorKworKwkgLyogRGlkIHRoZSBjaGlsZCBmYWlsPyAgKFRoaXMgc2hvdWxkbid0IGhhcHBlbi4pICAqLworKwkgfHwgc3RhdHVzCisrCisrCSAvKiBEaWQgdGhlIHZmb3JrL2NvbXBpbGVyIGJ1ZyBvY2N1cj8gICovCisrCSB8fCBwYXJlbnQgIT0gZ2V0cGlkKCkKKysKKysJIC8qIERpZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1ZyBvY2N1cj8gICovCisrCSB8fCBmc3RhdChmaWxlbm8oc3Rkb3V0KSwgJnN0KSAhPSAwCisrCSApOworKyAgfQorIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCisraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisrICBhY19jdl9mdW5jX3Zmb3JrX3dvcmtzPXllcworIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorKyAgYWNfY3ZfZnVuY192Zm9ya193b3Jrcz1ubworK2ZpCisrcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNjsgfQorIAorK2ZpOworK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbgorKyAgYWNfY3ZfZnVuY192Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yaworKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQorIGZpCistZG9uZQorIAorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY192Zm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XT1JLSU5HX1ZGT1JLIDEiID4+Y29uZmRlZnMuaAorIAorLWZvciBhY19mdW5jIGluIHVzdHJuY21wIHVzdHJuY2FzZWNtcAorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworK2Vsc2UKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrJGFzX2VjaG8gIiNkZWZpbmUgdmZvcmsgZm9yayIgPj5jb25mZGVmcy5oCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisrZmkKKytpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCisgCistI3VuZGVmICRhY19mdW5jCisrJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XT1JLSU5HX0ZPUksgMSIgPj5jb25mZGVmcy5oCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytmaQorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKy1maQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrCisrICBmb3IgYWNfaGVhZGVyIGluICRhY19oZWFkZXJfbGlzdAorK2RvIDoKKysgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKythY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorKyIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisgX0FDRU9GCisgCisgZmkKKy1kb25lCisgCisrZG9uZQorIAorLWZvciBhY19mdW5jIGluIHN5bWxpbmsKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisgCistI3VuZGVmICRhY19mdW5jCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCistZmkKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorK2ZvciBhY19mdW5jIGluIGdldHBhZ2VzaXplCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0cGFnZXNpemUiICJhY19jdl9mdW5jX2dldHBhZ2VzaXplIgorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZSIgPSB4eWVzOyB0aGVuIDoKKyAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKysjZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMQorIF9BQ0VPRgorIAorIGZpCisgZG9uZQorIAorLQorLWZvciBhY19mdW5jIGluIHJlYWRsaW5rCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBtbWFwIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBtbWFwLi4uICIgPiY2OyB9CisraWYgJHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubworK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKy8qIG1hbGxvYyBtaWdodCBoYXZlIGJlZW4gcmVuYW1lZCBhcyBycGxfbWFsbG9jLiAqLworKyN1bmRlZiBtYWxsb2MKKyAKKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrLyogVGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCisrICAgSGVyZSBpcyBhIG1hdHJpeCBvZiBtbWFwIHBvc3NpYmlsaXRpZXM6CisrCW1tYXAgcHJpdmF0ZSBub3QgZml4ZWQKKysJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKysJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorKwltbWFwIHNoYXJlZCBub3QgZml4ZWQKKysJbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAorKwltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBwZWQKKysgICBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgd2Ugc2hvdWxkIHZlcmlmeSB0aGF0IGNoYW5nZXMgY2Fubm90IGJlIHJlYWQoKQorKyAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBiYWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKKysgICBhZGRyZXNzLiAgKFRoZXJlIGhhdmUgYmVlbiBzeXN0ZW1zIHdoZXJlIHByaXZhdGUgd2FzIG5vdCBjb3JyZWN0bHkKKysgICBpbXBsZW1lbnRlZCBsaWtlIHRoZSBpbmZhbW91cyBpMzg2IHN2cjQuMCwgYW5kIHN5c3RlbXMgd2hlcmUgdGhlCisrICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlciBjYWNoZQorKyAgIGxpa2UgZWFybHkgdmVyc2lvbnMgb2YgRnJlZUJTRCBhbmQgcG9zc2libHkgY29udGVtcG9yYXJ5IE5ldEJTRC4pCisrICAgRm9yIHNoYXJlZCBtYXBwaW5ncywgd2Ugc2hvdWxkIGNvbnZlcnNlbHkgdmVyaWZ5IHRoYXQgY2hhbmdlcyBnZXQKKysgICBwcm9wYWdhdGVkIGJhY2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKysgICBHcmVwIHdhbnRzIHByaXZhdGUgZml4ZWQgYWxyZWFkeSBtYXBwZWQuCisrICAgVGhlIG1haW4gdGhpbmdzIGdyZXAgbmVlZHMgdG8ga25vdyBhYm91dCBtbWFwIGFyZToKKysgICAqIGRvZXMgaXQgZXhpc3QgYW5kIGlzIGl0IHNhZmUgdG8gd3JpdGUgaW50byB0aGUgbW1hcCdkIGFyZWEKKysgICAqIGhvdyB0byB1c2UgaXQgKEJTRCB2YXJpYW50cykgICovCisgCistI3VuZGVmICRhY19mdW5jCisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKysjaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIEhBVkVfU1RETElCX0gKKytjaGFyICptYWxsb2MgKCk7CisgI2VuZGlmCisgCisrLyogVGhpcyBtZXNzIHdhcyBjb3BpZWQgZnJvbSB0aGUgR05VIGdldHBhZ2VzaXplLmguICAqLworKyNpZm5kZWYgSEFWRV9HRVRQQUdFU0laRQorKyMgaWZkZWYgX1NDX1BBR0VTSVpFCisrIyAgZGVmaW5lIGdldHBhZ2VzaXplKCkgc3lzY29uZihfU0NfUEFHRVNJWkUpCisrIyBlbHNlIC8qIG5vIF9TQ19QQUdFU0laRSAqLworKyMgIGlmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKysjICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrIyAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKysjICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKKysjICAgZWxzZSAvKiBubyBFWEVDX1BBR0VTSVpFICovCisrIyAgICBpZmRlZiBOQlBHCisrIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQRyAqIENMU0laRQorKyMgICAgIGlmbmRlZiBDTFNJWkUKKysjICAgICAgZGVmaW5lIENMU0laRSAxCisrIyAgICAgZW5kaWYgLyogbm8gQ0xTSVpFICovCisrIyAgICBlbHNlIC8qIG5vIE5CUEcgKi8KKysjICAgICBpZmRlZiBOQlBDCisrIyAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEMKKysjICAgICBlbHNlIC8qIG5vIE5CUEMgKi8KKysjICAgICAgaWZkZWYgUEFHRVNJWkUKKysjICAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIFBBR0VTSVpFCisrIyAgICAgIGVuZGlmIC8qIFBBR0VTSVpFICovCisrIyAgICAgZW5kaWYgLyogbm8gTkJQQyAqLworKyMgICAgZW5kaWYgLyogbm8gTkJQRyAqLworKyMgICBlbmRpZiAvKiBubyBFWEVDX1BBR0VTSVpFICovCisrIyAgZWxzZSAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCisrIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIDgxOTIJLyogcHVudCB0b3RhbGx5ICovCisrIyAgZW5kaWYgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLworKyMgZW5kaWYgLyogbm8gX1NDX1BBR0VTSVpFICovCisrCisrI2VuZGlmIC8qIG5vIEhBVkVfR0VUUEFHRVNJWkUgKi8KKysKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKysgIGNoYXIgKmRhdGEsICpkYXRhMiwgKmRhdGEzOworKyAgY29uc3QgY2hhciAqY2RhdGEyOworKyAgaW50IGksIHBhZ2VzaXplOworKyAgaW50IGZkLCBmZDI7CisrCisrICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOworKworKyAgLyogRmlyc3QsIG1ha2UgYSBmaWxlIHdpdGggc29tZSBrbm93biBnYXJiYWdlIGluIGl0LiAqLworKyAgZGF0YSA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOworKyAgaWYgKCFkYXRhKQorKyAgICByZXR1cm4gMTsKKysgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorKyAgICAqKGRhdGEgKyBpKSA9IHJhbmQgKCk7CisrICB1bWFzayAoMCk7CisrICBmZCA9IGNyZWF0ICgiY29uZnRlc3QubW1hcCIsIDA2MDApOworKyAgaWYgKGZkIDwgMCkKKysgICAgcmV0dXJuIDI7CisrICBpZiAod3JpdGUgKGZkLCBkYXRhLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisrICAgIHJldHVybiAzOworKyAgY2xvc2UgKGZkKTsKKysKKysgIC8qIE5leHQsIGNoZWNrIHRoYXQgdGhlIHRhaWwgb2YgYSBwYWdlIGlzIHplcm8tZmlsbGVkLiAgRmlsZSBtdXN0IGhhdmUKKysgICAgIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIHdlIHJpc2sgU0lHQlVTIGZvciBlbnRpcmUgcGFnZS4gICovCisrICBmZDIgPSBvcGVuICgiY29uZnRlc3QudHh0IiwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworKyAgaWYgKGZkMiA8IDApCisrICAgIHJldHVybiA0OworKyAgY2RhdGEyID0gIiI7CisrICBpZiAod3JpdGUgKGZkMiwgY2RhdGEyLCAxKSAhPSAxKQorKyAgICByZXR1cm4gNTsKKysgIGRhdGEyID0gKGNoYXIgKikgbW1hcCAoMCwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkMiwgMEwpOworKyAgaWYgKGRhdGEyID09IE1BUF9GQUlMRUQpCisrICAgIHJldHVybiA2OworKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisrICAgIGlmICgqKGRhdGEyICsgaSkpCisrICAgICAgcmV0dXJuIDc7CisrICBjbG9zZSAoZmQyKTsKKysgIGlmIChtdW5tYXAgKGRhdGEyLCBwYWdlc2l6ZSkpCisrICAgIHJldHVybiA4OworKworKyAgLyogTmV4dCwgdHJ5IHRvIG1tYXAgdGhlIGZpbGUgYXQgYSBmaXhlZCBhZGRyZXNzIHdoaWNoIGFscmVhZHkgaGFzCisrICAgICBzb21ldGhpbmcgZWxzZSBhbGxvY2F0ZWQgYXQgaXQuICBJZiB3ZSBjYW4sIGFsc28gbWFrZSBzdXJlIHRoYXQKKysgICAgIHdlIHNlZSB0aGUgc2FtZSBnYXJiYWdlLiAgKi8KKysgIGZkID0gb3BlbiAoImNvbmZ0ZXN0Lm1tYXAiLCBPX1JEV1IpOworKyAgaWYgKGZkIDwgMCkKKysgICAgcmV0dXJuIDk7CisrICBpZiAoZGF0YTIgIT0gbW1hcCAoZGF0YTIsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorKwkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgZmQsIDBMKSkKKysgICAgcmV0dXJuIDEwOworKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisrICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEyICsgaSkpCisrICAgICAgcmV0dXJuIDExOworKworKyAgLyogRmluYWxseSwgbWFrZSBzdXJlIHRoYXQgY2hhbmdlcyB0byB0aGUgbWFwcGVkIGFyZWEgZG8gbm90CisrICAgICBwZXJjb2xhdGUgYmFjayB0byB0aGUgZmlsZSBhcyBzZWVuIGJ5IHJlYWQoKS4gIChUaGlzIGlzIGEgYnVnIG9uCisrICAgICBzb21lIHZhcmlhbnRzIG9mIGkzODYgc3ZyNC4wLikgICovCisrICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKysgICAgKihkYXRhMiArIGkpID0gKihkYXRhMiArIGkpICsgMTsKKysgIGRhdGEzID0gKGNoYXIgKikgbWFsbG9jIChwYWdlc2l6ZSk7CisrICBpZiAoIWRhdGEzKQorKyAgICByZXR1cm4gMTI7CisrICBpZiAocmVhZCAoZmQsIGRhdGEzLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisrICAgIHJldHVybiAxMzsKKysgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorKyAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMyArIGkpKQorKyAgICAgIHJldHVybiAxNDsKKysgIGNsb3NlIChmZCk7CisgICByZXR1cm4gMDsKKyB9CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXMKKyBlbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKysgIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KKyBmaQorLQorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisrICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKyAKKyBmaQorLWRvbmUKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPiY2OyB9CisraWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCA9IHllczsgdGhlbgorIAorKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUCAxIiA+PmNvbmZkZWZzLmgKKyAKKytmaQorK3JtIC1mIGNvbmZ0ZXN0Lm1tYXAgY29uZnRlc3QudHh0CisgCistZm9yIGFjX2Z1bmMgaW4gbHN0YXQgc3RhdAorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCisrZm9yIGFjX2hlYWRlciBpbiBzeXMvc2VsZWN0Lmggc3lzL3NvY2tldC5oCisrZG8gOgorKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKKyBfQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCistCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworIAorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorK2ZpCisgCistI3VuZGVmICRhY19mdW5jCisrZG9uZQorIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZXMgb2YgYXJndW1lbnRzIGZvciBzZWxlY3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3Igc2VsZWN0Li4uICIgPiY2OyB9CisraWYgJHthY19jdl9mdW5jX3NlbGVjdF9hcmdzKzp9IGZhbHNlOyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgZm9yIGFjX2FyZzIzNCBpbiAnZmRfc2V0IConICdpbnQgKicgJ3ZvaWQgKic7IGRvCisrIGZvciBhY19hcmcxIGluICdpbnQnICdzaXplX3QnICd1bnNpZ25lZCBsb25nIGludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisrICBmb3IgYWNfYXJnNSBpbiAnc3RydWN0IHRpbWV2YWwgKicgJ2NvbnN0IHN0cnVjdCB0aW1ldmFsIConOyBkbworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKysjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKysjIGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAjZW5kaWYKKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKKy1jaG9rZSBtZQorKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorKyMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNlbmRpZgorIAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuICRhY19mdW5jICgpOworK2V4dGVybiBpbnQgc2VsZWN0ICgkYWNfYXJnMSwKKysJCQkJCSAgICAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LAorKwkJCQkJICAgICRhY19hcmc1KTsKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistCWV2YWwgIiRhc19hY192YXI9bm8iCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgYWNfY3ZfZnVuY19zZWxlY3RfYXJncz0iJGFjX2FyZzEsJGFjX2FyZzIzNCwkYWNfYXJnNSI7IGJyZWFrIDMKKyBmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgZG9uZQorKyBkb25lCisrZG9uZQorKyMgUHJvdmlkZSBhIHNhZmUgZGVmYXVsdCB2YWx1ZS4KKys6ICIke2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9aW50LGludCAqLHN0cnVjdCB0aW1ldmFsICp9IgorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCistICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCistX0FDRU9GCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID4mNjsgfQorK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLCcKKytzZXQgZHVtbXkgYGVjaG8gIiRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKytJRlM9JGFjX3NhdmVfSUZTCisrc2hpZnQKKyAKKy1maQorLWRvbmUKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcxICQxCisrX0FDRU9GCisgCisgCistZm9yIGFjX2Z1bmMgaW4gc25wcmludGYKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzIzNCAoJDIpCisgX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkc1ICgkMykKKytfQUNFT0YKKyAKKy0jdW5kZWYgJGFjX2Z1bmMKKytybSAtZiBjb25mdGVzdCoKKyAKKy0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKy0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKKy1jaG9rZSBtZQorLSNlbmRpZgorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorK2ZvciBhY19mdW5jIGluIGdldGN3ZAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGN3ZCIgImFjX2N2X2Z1bmNfZ2V0Y3dkIgorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRjd2QiID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0dFVENXRCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisrZG9uZQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdG5hbWUKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRob3N0bmFtZSIgImFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWUiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RuYW1lIiA9IHh5ZXM7IHRoZW4gOgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorKyNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRSAxCisgX0FDRU9GCisgCisgZmkKKyBkb25lCisgCistCistIyBGaWd1cmUgb3V0IGhvdyB0byBtYXAgc3RybGNhdCBhbmQgc3RybGNweSBpZiB0aGV5IGRvbid0IGV4aXN0IGJ5CistIyBlaXRoZXIgc2ltcGx5IHJlZGVmaW5pbmcgdGhlbSBvciBieSB1c2luZyBhIGxvY2FsIGNvbXBhdGliaWxpdHkKKy0jIGltcGxlbWVudGF0aW9uLgorLSMKKy0jIFNvbWUgY2F2ZWF0cyBhcmUgd29ydGggbWVudGlvbmluZyB3aXRoIHJlc3BlY3QgdG8gZGVmaW5pbmcgdGhlbSB0bworLSMgc3RybntjYXQsY3B5fS4gSW4gcGFydGljdWxhciwgc3RybHtjYXQsY3B5fToKKy0jCistIyAgIDEpIEFMV0FZUyBOVUxMLXRlcm1pbmF0ZSBpZiB0aGUgZGVzdGluYXRpb24gaGFzIGxlbmd0aC4KKy0jICAgMikgVGFrZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBidWZmZXIgKG5vdCB0aGUgc3BhY2UgbGVmdCBvdmVyKS4KKy0jICAgMykgRG9uJ3QgTlVMTC1maWxsIHRoZSByZW1haW5kZXIgb2YgaXRzIGRlc3RpbmF0aW9uLgorLSMgICA0KSBSZXR1cm4gYSBzaXplX3Qgc2l6ZSByYXRoZXIgdGhhbiBhIGNoYXIgKiBwb2ludGVyLgorLSMKKy0jIFdoaWxlIENvcmVGb3VuZGF0aW9uIGhhcyBub3QgYmVlbiBmb3VuZCB0byByZWx5IG9uIGFueSBvZiB0aGVzZQorLSMgZGlmZmVyZW5jZXMsIGl0IG1heSBpbiB0aGUgZnV0dXJlLgorLQorLWZvciBhY19mdW5jIGluCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKytmb3IgYWNfZnVuYyBpbiBtYWxsb2MgcmVhbGxvYworK2RvIDoKKysgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKy0KKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCistCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCistCistI3VuZGVmICRhY19mdW5jCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytmaQorK2RvbmUKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytmb3IgYWNfZnVuYyBpbiBtZW1jaHIgbWVtY21wIG1lbW1vdmUgbWVtc2V0CisrZG8gOgorKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisrYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisrZG9uZQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrZm9yIGFjX2Z1bmMgaW4gbWtkaXIKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJta2RpciIgImFjX2N2X2Z1bmNfbWtkaXIiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX21rZGlyIiA9IHh5ZXM7IHRoZW4gOgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorKyNkZWZpbmUgSEFWRV9NS0RJUiAxCisgX0FDRU9GCisgCistZWxzZQorLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KKy0gICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworLSAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKy0gOzsKKy1lc2FjCistCisgZmkKKyBkb25lCisgCistCistCistCistCistCistCistZm9yIGFjX2Z1bmMgaW4gc3RybGNhdCBzdHJuY2F0CistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKytmb3IgYWNfZnVuYyBpbiBtdW5tYXAKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtdW5tYXAiICJhY19jdl9mdW5jX211bm1hcCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbXVubWFwIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9NVU5NQVAgMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKy0KKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisrZmkKKytkb25lCisgCistI3VuZGVmICRhY19mdW5jCisrZm9yIGFjX2Z1bmMgaW4gcm1kaXIKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJybWRpciIgImFjX2N2X2Z1bmNfcm1kaXIiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX3JtZGlyIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9STURJUiAxCisrX0FDRU9GCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKytmaQorK2RvbmUKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKytmb3IgYWNfZnVuYyBpbiBzZWxlY3QKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzZWxlY3QiICJhY19jdl9mdW5jX3NlbGVjdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2VsZWN0IiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TRUxFQ1QgMQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKy1jYXNlICIoKCRhY190cnkiIGluCistICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKy0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworLWVzYWMKKy1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKy0gIGFjX3N0YXR1cz0kPworLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKy0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQorLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKy0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCistICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCistICBldmFsICIkYXNfYWNfdmFyPXllcyIKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKy0JZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorK2RvbmUKKyAKKy1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistZmkKKy1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKy0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CistaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorK2ZvciBhY19mdW5jIGluIHNldGVudgorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNldGVudiIgImFjX2N2X2Z1bmNfc2V0ZW52IgorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zZXRlbnYiID0geHllczsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBIQVZFX1NFVEVOViAxCisgX0FDRU9GCisgCisgZmkKKyBkb25lCisgCistaWYgdGVzdCAieCR7YWNfY3ZfZnVuY19zdHJsY2F0fSIgPSAieG5vIjsgdGhlbgorLQl7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFuZGxlIG1pc3Npbmcgc3RybGNhdCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFuZGxlIG1pc3Npbmcgc3RybGNhdC4uLiAkRUNIT19DIiA+JjY7IH0KKy0JaWYgdGVzdCAieCR7YWNfY3ZfZnVuY19zdHJuY2F0fSIgPSAieHllcyI7IHRoZW4KKy0JCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbWFwcGVkIHRvIHN0cm5jYXQiID4mNQorLWVjaG8gIiR7RUNIT19UfW1hcHBlZCB0byBzdHJuY2F0IiA+JjY7IH0KKy0KKy1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorLSNkZWZpbmUgc3RybGNhdCBzdHJuY2F0CisrZm9yIGFjX2Z1bmMgaW4gc29ja2V0CisrZG8gOgorKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic29ja2V0IiAiYWNfY3ZfZnVuY19zb2NrZXQiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX3NvY2tldCIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU09DS0VUIDEKKyBfQUNFT0YKKyAKKy0JZWxzZQorLQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBsb2NhbCBpbXBsZW1lbnRhdGlvbiIgPiY1CistZWNobyAiJHtFQ0hPX1R9dXNpbmcgbG9jYWwgaW1wbGVtZW50YXRpb24iID4mNjsgfQorK2ZpCisrZG9uZQorIAorLWZvciBhY19mdW5jIGluIHN0cmxjYXQKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2ZvciBhY19mdW5jIGluIGdldGdpZCBnZXR1aWQgZ2V0ZWdpZCBnZXRldWlkCisrZG8gOgorKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisrYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisgX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKy0KKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKy0KKy0jdW5kZWYgJGFjX2Z1bmMKKy0KKy0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKy0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKKy1jaG9rZSBtZQorLSNlbmRpZgorK2ZpCisrZG9uZQorIAorLWludAorLW1haW4gKCkKKy17CistcmV0dXJuICRhY19mdW5jICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorK2ZvciBhY19mdW5jIGluIGdldHBpZAorK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHBpZCIgImFjX2N2X2Z1bmNfZ2V0cGlkIgorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwaWQiID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0dFVFBJRCAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisrZG9uZQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrZm9yIGFjX2Z1bmMgaW4gc3RyZXJyb3IKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJlcnJvciIgImFjX2N2X2Z1bmNfc3RyZXJyb3IiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmVycm9yIiA9IHh5ZXM7IHRoZW4gOgorICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorKyNkZWZpbmUgSEFWRV9TVFJFUlJPUiAxCisgX0FDRU9GCisgCistZWxzZQorLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KKy0gICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworLSAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKy0gOzsKKy1lc2FjCistCisgZmkKKyBkb25lCisgCisrZm9yIGFjX2Z1bmMgaW4gcmludCBzdHJjaHIgc3RyZHVwIHN0cnJjaHIgc3Ryc3RyIHN0cnRvZCBzdHJ0b2wgc3RydG91bAorK2RvIDoKKysgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorK19BQ0VPRgorIAorLQlmaQorIGZpCisrZG9uZQorIAorK2ZvciBhY19mdW5jIGluIHN0cm5jbXAgc3RybmNhc2VjbXAKKytkbyA6CisrICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKythY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCisraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKytfQUNFT0YKKyAKKytmaQorK2RvbmUKKyAKKy0KKy0KKy0KKy1mb3IgYWNfZnVuYyBpbiBzdHJsY3B5IHN0cm5jcHkKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KKy1pZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCistICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorLWVsc2UKKy0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGNvbmZkZWZzLmguICAqLworK2ZvciBhY19mdW5jIGluIHVzdHJuY21wIHVzdHJuY2FzZWNtcAorK2RvIDoKKysgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorIF9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCistICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCistI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKy0KKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisrZmkKKytkb25lCisgCistI3VuZGVmICRhY19mdW5jCisrZm9yIGFjX2Z1bmMgaW4gc3ltbGluaworK2RvIDoKKysgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN5bWxpbmsiICJhY19jdl9mdW5jX3N5bWxpbmsiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX3N5bWxpbmsiID0geHllczsgdGhlbiA6CisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX1NZTUxJTksgMQorK19BQ0VPRgorIAorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrZmkKKytkb25lCisgCistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gJGFjX2Z1bmMgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CisrZm9yIGFjX2Z1bmMgaW4gcmVhZGxpbmsKKytkbyA6CisrICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJyZWFkbGluayIgImFjX2N2X2Z1bmNfcmVhZGxpbmsiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX3JlYWRsaW5rIiA9IHh5ZXM7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9SRUFETElOSyAxCisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisrZG9uZQorIAorLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCistICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1maQorLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKy1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisrZm9yIGFjX2Z1bmMgaW4gbHN0YXQgc3RhdAorK2RvIDoKKysgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKKytpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCistI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorIF9BQ0VPRgorIAorIGZpCisgZG9uZQorIAorLWlmIHRlc3QgIngke2FjX2N2X2Z1bmNfc3RybGNweX0iID0gInhubyI7IHRoZW4KKy0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhbmRsZSBtaXNzaW5nIHN0cmxjcHkiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhbmRsZSBtaXNzaW5nIHN0cmxjcHkuLi4gJEVDSE9fQyIgPiY2OyB9CistCWlmIHRlc3QgIngke2FjX2N2X2Z1bmNfc3RybmNweX0iID0gInh5ZXMiOyB0aGVuCistCQl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG1hcHBlZCB0byBzdHJuY3B5IiA+JjUKKy1lY2hvICIke0VDSE9fVH1tYXBwZWQgdG8gc3RybmNweSIgPiY2OyB9CistCistY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKy0jZGVmaW5lIHN0cmxjcHkgc3RybmNweQorK2ZvciBhY19mdW5jIGluIHNucHJpbnRmCisrZG8gOgorKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic25wcmludGYiICJhY19jdl9mdW5jX3NucHJpbnRmIgorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zbnByaW50ZiIgPSB4eWVzOyB0aGVuIDoKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU05QUklOVEYgMQorIF9BQ0VPRgorIAorLQllbHNlCistCQl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGxvY2FsIGltcGxlbWVudGF0aW9uIiA+JjUKKy1lY2hvICIke0VDSE9fVH11c2luZyBsb2NhbCBpbXBsZW1lbnRhdGlvbiIgPiY2OyB9CisrZmkKKytkb25lCisgCistZm9yIGFjX2Z1bmMgaW4gc3RybGNweQorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQorLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKy0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CistZWxzZQorLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKy0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKy0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworIAorLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysjIEZpZ3VyZSBvdXQgaG93IHRvIG1hcCBzdHJsY2F0IGFuZCBzdHJsY3B5IGlmIHRoZXkgZG9uJ3QgZXhpc3QgYnkKKysjIGVpdGhlciBzaW1wbHkgcmVkZWZpbmluZyB0aGVtIG9yIGJ5IHVzaW5nIGEgbG9jYWwgY29tcGF0aWJpbGl0eQorKyMgaW1wbGVtZW50YXRpb24uCisrIworKyMgU29tZSBjYXZlYXRzIGFyZSB3b3J0aCBtZW50aW9uaW5nIHdpdGggcmVzcGVjdCB0byBkZWZpbmluZyB0aGVtIHRvCisrIyBzdHJue2NhdCxjcHl9LiBJbiBwYXJ0aWN1bGFyLCBzdHJse2NhdCxjcHl9OgorKyMKKysjICAgMSkgQUxXQVlTIE5VTEwtdGVybWluYXRlIGlmIHRoZSBkZXN0aW5hdGlvbiBoYXMgbGVuZ3RoLgorKyMgICAyKSBUYWtlIHRoZSBmdWxsIHNpemUgb2YgdGhlIGJ1ZmZlciAobm90IHRoZSBzcGFjZSBsZWZ0IG92ZXIpLgorKyMgICAzKSBEb24ndCBOVUxMLWZpbGwgdGhlIHJlbWFpbmRlciBvZiBpdHMgZGVzdGluYXRpb24uCisrIyAgIDQpIFJldHVybiBhIHNpemVfdCBzaXplIHJhdGhlciB0aGFuIGEgY2hhciAqIHBvaW50ZXIuCisrIworKyMgV2hpbGUgQ29yZUZvdW5kYXRpb24gaGFzIG5vdCBiZWVuIGZvdW5kIHRvIHJlbHkgb24gYW55IG9mIHRoZXNlCisrIyBkaWZmZXJlbmNlcywgaXQgbWF5IGluIHRoZSBmdXR1cmUuCisgCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCisgCistI3VuZGVmICRhY19mdW5jCisgCistLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCistICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCistY2hva2UgbWUKKy0jZW5kaWYKKyAKKy1pbnQKKy1tYWluICgpCisteworLXJldHVybiAkYWNfZnVuYyAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKysKKytmb3IgYWNfZnVuYyBpbiBzdHJsY2F0IHN0cm5jYXQKKytkbyA6CisrICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKythY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCisraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCistY2FzZSAiKCgkYWNfdHJ5IiBpbgorLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CistICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKy1lc2FjCistZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKy0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCistICBhY19zdGF0dXM9JD8KKy0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCistICBybSAtZiBjb25mdGVzdC5lcjEKKy0gIGNhdCBjb25mdGVzdC5lcnIgPiY1CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CistCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKy0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKy0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistCWV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKytkb25lCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKytpZiB0ZXN0ICJ4JHthY19jdl9mdW5jX3N0cmxjYXR9IiA9ICJ4bm8iOyB0aGVuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhbmRsZSBtaXNzaW5nIHN0cmxjYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYW5kbGUgbWlzc2luZyBzdHJsY2F0Li4uICIgPiY2OyB9CisrCWlmIHRlc3QgIngke2FjX2N2X2Z1bmNfc3RybmNhdH0iID0gInh5ZXMiOyB0aGVuCisrCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbWFwcGVkIHRvIHN0cm5jYXQiID4mNQorKyRhc19lY2hvICJtYXBwZWQgdG8gc3RybmNhdCIgPiY2OyB9CisrCisrJGFzX2VjaG8gIiNkZWZpbmUgc3RybGNhdCBzdHJuY2F0IiA+PmNvbmZkZWZzLmgKKysKKysJZWxzZQorKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGxvY2FsIGltcGxlbWVudGF0aW9uIiA+JjUKKyskYXNfZWNobyAidXNpbmcgbG9jYWwgaW1wbGVtZW50YXRpb24iID4mNjsgfQorKwkJYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RybGNhdCIgImFjX2N2X2Z1bmNfc3RybGNhdCIKKytpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RybGNhdCIgPSB4eWVzOyB0aGVuIDoKKysgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSTENBVCAxIiA+PmNvbmZkZWZzLmgKKyAKKyBlbHNlCisgICBjYXNlICIgJExJQk9CSlMgIiBpbgorLSAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7CistICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorKyAgKiIgc3RybGNhdC4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cmxjYXQuJGFjX29iamV4dCIKKyAgOzsKKyBlc2FjCisgCisgZmkKKy1kb25lCisgCisgCisgCWZpCisgZmkKKyAKKyAKKy0jCistIyBPdGhlciBpYnJhcnkgZnVuY3Rpb25zIHdlIG1pZ2h0IG5lZWQgdG8gcHJvdmlkZSBsb2NhbCBjb21wYXRpYmlsaXR5CistIyBpbXBsZW1lbnRhdGlvbnMgb2YuCistIworIAorIAorLWZvciBhY19mdW5jIGluIGZsc2wgZ2V0dGltZW9mZGF5CistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CistaWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKy1lbHNlCistICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBjb25mZGVmcy5oLiAgKi8KKytmb3IgYWNfZnVuYyBpbiBzdHJsY3B5IHN0cm5jcHkKKytkbyA6CisrICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKythY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCisraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyBfQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCistCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLQorLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorIAorLSN1bmRlZiAkYWNfZnVuYworLQorLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworLWNob2tlIG1lCistI2VuZGlmCisrZmkKKytkb25lCisrCisraWYgdGVzdCAieCR7YWNfY3ZfZnVuY19zdHJsY3B5fSIgPSAieG5vIjsgdGhlbgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYW5kbGUgbWlzc2luZyBzdHJsY3B5IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFuZGxlIG1pc3Npbmcgc3RybGNweS4uLiAiID4mNjsgfQorKwlpZiB0ZXN0ICJ4JHthY19jdl9mdW5jX3N0cm5jcHl9IiA9ICJ4eWVzIjsgdGhlbgorKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG1hcHBlZCB0byBzdHJuY3B5IiA+JjUKKyskYXNfZWNobyAibWFwcGVkIHRvIHN0cm5jcHkiID4mNjsgfQorKworKyRhc19lY2hvICIjZGVmaW5lIHN0cmxjcHkgc3RybmNweSIgPj5jb25mZGVmcy5oCisrCisrCWVsc2UKKysJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBsb2NhbCBpbXBsZW1lbnRhdGlvbiIgPiY1CisrJGFzX2VjaG8gInVzaW5nIGxvY2FsIGltcGxlbWVudGF0aW9uIiA+JjY7IH0KKysJCWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cmxjcHkiICJhY19jdl9mdW5jX3N0cmxjcHkiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmxjcHkiID0geHllczsgdGhlbiA6CisrICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkxDUFkgMSIgPj5jb25mZGVmcy5oCisgCistaW50CistbWFpbiAoKQorLXsKKy1yZXR1cm4gJGFjX2Z1bmMgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChhY190cnk9IiRhY19saW5rIgorLWNhc2UgIigoJGFjX3RyeSIgaW4KKy0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CistZXNhYworLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CistICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorLSAgYWNfc3RhdHVzPSQ/CistICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorLSAgcm0gLWYgY29uZnRlc3QuZXIxCistICBjYXQgY29uZnRlc3QuZXJyID4mNQorLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CistCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCistICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKy0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKy0gIGV2YWwgIiRhc19hY192YXI9eWVzIgorIGVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKysgICoiIHN0cmxjcHkuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJsY3B5LiRhY19vYmpleHQiCisrIDs7CisrZXNhYworIAorLQlldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCisgCistcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKy0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorKworKwlmaQorIGZpCistYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCistCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKy0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKy0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKy1fQUNFT0YKKysKKysKKysjCisrIyBPdGhlciBpYnJhcnkgZnVuY3Rpb25zIHdlIG1pZ2h0IG5lZWQgdG8gcHJvdmlkZSBsb2NhbCBjb21wYXRpYmlsaXR5CisrIyBpbXBsZW1lbnRhdGlvbnMgb2YuCisrIworK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZsc2wiICJhY19jdl9mdW5jX2Zsc2wiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX2Zsc2wiID0geHllczsgdGhlbiA6CisrICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZMU0wgMSIgPj5jb25mZGVmcy5oCisgCisgZWxzZQorICAgY2FzZSAiICRMSUJPQkpTICIgaW4KKy0gICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworLSAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgICoiIGZsc2wuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBmbHNsLiRhY19vYmpleHQiCisrIDs7CisrZXNhYworKworK2ZpCisrCisrYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0dGltZW9mZGF5IiAiYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkiCisraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHRpbWVvZmRheSIgPSB4eWVzOyB0aGVuIDoKKysgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEiID4+Y29uZmRlZnMuaAorKworK2Vsc2UKKysgIGNhc2UgIiAkTElCT0JKUyAiIGluCisrICAqIiBnZXR0aW1lb2ZkYXkuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXR0aW1lb2ZkYXkuJGFjX29iamV4dCIKKyAgOzsKKyBlc2FjCisgCisgZmkKKy1kb25lCisgCisgCisgCitAQCAtMzIyNDMsMTIgKzIwMjg0LDEzIEBAIF9BQ0VPRgorICAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAgKiR7YXNfbmx9KikKKyAgICAgICBjYXNlICRhY192YXIgaW4gIygKKy0gICAgICAqX2N2XyopIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisrICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgICBlc2FjCisgICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorLSAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKysgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgIGVzYWMgOzsKKyAgICAgZXNhYworICAgZG9uZQorQEAgLTMyMjU2LDggKzIwMjk4LDggQEAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisgICAoc2V0KSAyPiYxIHwKKyAgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICAqJHthc19ubH1hY19zcGFjZT1cICopCistICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorLSAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKysgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgIHNlZCAtbiBcCisgCSJzLycvJ1xcXFwnJy9nOworIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKK0BAIC0zMjI3OSwxMyArMjAzMjEsMjQgQEAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisgICAgICA6ZW5kJyA+PmNvbmZjYWNoZQorIGlmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorLSAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorLSAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisrICAgICAgZWxzZQorKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorKyAgICAgICAgKi8qIHwgPzoqKQorKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKysJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorKyAgICAgICAgKikKKysJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworKwllc2FjCisrICAgICAgZmkKKysgICAgZmkKKyAgIGVsc2UKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorLWVjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgZmkKKyBmaQorIHJtIC1mIGNvbmZjYWNoZQorQEAgLTMyMjk4LDgzICsyMDM1MSw3NCBAQCBERUZTPS1ESEFWRV9DT05GSUdfSAorIAorIGFjX2xpYm9ianM9CisgYWNfbHRsaWJvYmpzPQorK1U9CisgZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKy0gIGFjX2k9YGVjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisrICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKyAgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorLSAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCistICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKKysgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisrICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKKyBkb25lCisgTElCT0JKUz0kYWNfbGlib2JqcworIAorIExUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZS4uLiAiID4mNjsgfQorKyAgIGlmIHRlc3QgLW4gIiRhbV9zbGVlcF9waWQiOyB0aGVuCisrICAgICAjIEhpZGUgd2FybmluZ3MgYWJvdXQgcmV1c2VkIFBJRHMuCisrICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKKysgICBmaQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBkb25lIiA+JjUKKyskYXNfZWNobyAiZG9uZSIgPiY2OyB9CisrIGlmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCisrICBhbV9fRVhFRVhUX1RSVUU9CisrICBhbV9fRVhFRVhUX0ZBTFNFPScjJworK2Vsc2UKKysgIGFtX19FWEVFWFRfVFJVRT0nIycKKysgIGFtX19FWEVFWFRfRkFMU0U9CisrZmkKKysKKyBpZiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9UUlVFfSIgJiYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfRkFMU0V9IjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCistVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCisrVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorIGZpCisgaWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCistVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCistVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKytVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CisgZmkKKyBpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKytVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CisgZmkKKyBpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistZmkKKy1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKy0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKKyBmaQorIGlmIHRlc3QgLXogIiR7Q0ZfQlVJTERfREVCVUdfVFJVRX0iICYmIHRlc3QgLXogIiR7Q0ZfQlVJTERfREVCVUdfRkFMU0V9IjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJDRl9CVUlMRF9ERUJVR1wiIHdhcyBuZXZlciBkZWZpbmVkLgorLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJDRl9CVUlMRF9ERUJVR1wiIHdhcyBuZXZlciBkZWZpbmVkLgorLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkNGX0JVSUxEX0RFQlVHXCIgd2FzIG5ldmVyIGRlZmluZWQuCisrVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorIGZpCisgaWYgdGVzdCAteiAiJHtDRl9CVUlMRF9QUk9GSUxFX1RSVUV9IiAmJiB0ZXN0IC16ICIke0NGX0JVSUxEX1BST0ZJTEVfRkFMU0V9IjsgdGhlbgorLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJDRl9CVUlMRF9QUk9GSUxFXCIgd2FzIG5ldmVyIGRlZmluZWQuCistVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkNGX0JVSUxEX1BST0ZJTEVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKy1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJDRl9CVUlMRF9QUk9GSUxFXCIgd2FzIG5ldmVyIGRlZmluZWQuCisrVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorIGZpCisgaWYgdGVzdCAteiAiJHtDRl9CVUlMRF9URVNUU19UUlVFfSIgJiYgdGVzdCAteiAiJHtDRl9CVUlMRF9URVNUU19GQUxTRX0iOyB0aGVuCistICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkNGX0JVSUxEX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCistVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkNGX0JVSUxEX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCistVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQ0ZfQlVJTERfVEVTVFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KKytVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CisgZmkKKyAKKy06ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CisrOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCisrYWNfd3JpdGVfZmFpbD0wCisgYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKKyBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorLWNhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KKythc193cml0ZV9mYWlsPTAKKytjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorICMhICRTSEVMTAorICMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyAjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KK0BAIC0zMjM4NCw1OSArMjA0MjgsNzkgQEAgY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorIGRlYnVnPWZhbHNlCisgYWNfY3NfcmVjaGVjaz1mYWxzZQorIGFjX2NzX3NpbGVudD1mYWxzZQorLVNIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CistX0FDRU9GCisgCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KKytleHBvcnQgU0hFTEwKKytfQVNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgCisgIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCisgRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBlbXVsYXRlIHNoCisgICBOVUxMQ01EPToKKy0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyBlbHNlCistICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKy0gICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisrICAqcG9zaXgqKSA6CisrICAgIHNldCAtbyBwb3NpeCA7OyAjKAorKyAgKikgOgorKyAgICAgOzsKKyBlc2FjCistCisgZmkKKyAKKyAKKy0KKy0KKy0jIFBBVEggbmVlZHMgQ1IKKy0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCistYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCistYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCistYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCistYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworLQorLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCistICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCistICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCistICBjaG1vZCAreCBjb25mJCQuc2gKKy0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgIFBBVEhfU0VQQVJBVE9SPSc7JworK2FzX25sPScKKysnCisrZXhwb3J0IGFzX25sCisrIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KKythc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisrIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisrIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KKytpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisrICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2VjaG89J3ByaW50IC1yIC0tJworKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCisrZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisrICBhc19lY2hvX249J3ByaW50ZiAlcycKKytlbHNlCisrICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKysgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKysgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICAgZWxzZQorLSAgICBQQVRIX1NFUEFSQVRPUj06CisrICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisrICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisrICAgICAgYXJnPSQxOworKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorKyAgICAgICoiJGFzX25sIiopCisrCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworKyAgICAgIGVzYWM7CisrICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorKyAgICAnCisrICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICAgZmkKKy0gIHJtIC1mIGNvbmYkJC5zaAorKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworIGZpCisgCistIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCistaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBhc191bnNldD11bnNldAorLWVsc2UKKy0gIGFzX3Vuc2V0PWZhbHNlCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIFBBVEhfU0VQQVJBVE9SPToKKysgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKysgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKysgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIH0KKyBmaQorIAorIAorQEAgLTMyNDQ1LDIwICsyMDUwOSwxOSBAQCBmaQorICMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorICMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorICMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKy1hc19ubD0nCistJworIElGUz0iICIiCSRhc19ubCIKKyAKKyAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorLWNhc2UgJDAgaW4KKythc19teXNlbGY9CisrY2FzZSAkMCBpbiAjKCgKKyAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyBmb3IgYXNfZGlyIGluICRQQVRICisgZG8KKyAgIElGUz0kYXNfc2F2ZV9JRlMKKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCistICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworLWRvbmUKKysgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKysgIGRvbmUKKyBJRlM9JGFzX3NhdmVfSUZTCisgCisgICAgICA7OworQEAgLTMyNDY5LDMyICsyMDUzMiwxMTEgQEAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICAgYXNfbXlzZWxmPSQwCisgZmkKKyBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCistICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCistICB7IChleGl0IDEpOyBleGl0IDE7IH0KKysgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisrICBleGl0IDEKKyBmaQorIAorLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorLWZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKKy1kbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKysjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisrIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCisrZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisrICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKKyBkb25lCisgUFMxPSckICcKKyBQUzI9Jz4gJworIFBTND0nKyAnCisgCisgIyBOTFMgbnVpc2FuY2VzLgorLWZvciBhc192YXIgaW4gXAorLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKy0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCistICBMQ19URUxFUEhPTkUgTENfVElNRQorLWRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKy0gIGVsc2UKKy0gICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKytMQ19BTEw9QworK2V4cG9ydCBMQ19BTEwKKytMQU5HVUFHRT1DCisrZXhwb3J0IExBTkdVQUdFCisrCisrIyBDRFBBVEguCisrKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorKworKworKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisrIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisrIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KKythc19mbl9lcnJvciAoKQorK3sKKysgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisrICBpZiB0ZXN0ICIkNCI7IHRoZW4KKysgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgIGZpCistZG9uZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKysgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworK30gIyBhc19mbl9lcnJvcgorKworKworKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCisrYXNfZm5fc2V0X3N0YXR1cyAoKQorK3sKKysgIHJldHVybiAkMQorK30gIyBhc19mbl9zZXRfc3RhdHVzCisrCisrIyBhc19mbl9leGl0IFNUQVRVUworKyMgLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KKythc19mbl9leGl0ICgpCisreworKyAgc2V0ICtlCisrICBhc19mbl9zZXRfc3RhdHVzICQxCisrICBleGl0ICQxCisrfSAjIGFzX2ZuX2V4aXQKKysKKysjIGFzX2ZuX3Vuc2V0IFZBUgorKyMgLS0tLS0tLS0tLS0tLS0tCisrIyBQb3J0YWJseSB1bnNldCBWQVIuCisrYXNfZm5fdW5zZXQgKCkKKyt7CisrICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9CisrfQorK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisrIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisrIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisrIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorKyMgaW1wbGVtZW50YXRpb25zLgorK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKysgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorKyAgeworKyAgICBldmFsICQxKz1cJDIKKysgIH0nCisrZWxzZQorKyAgYXNfZm5fYXBwZW5kICgpCisrICB7CisrICAgIGV2YWwgJDE9XCQkMVwkMgorKyAgfQorK2ZpICMgYXNfZm5fYXBwZW5kCisrCisrIyBhc19mbl9hcml0aCBBUkcuLi4KKysjIC0tLS0tLS0tLS0tLS0tLS0tLQorKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCisraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisrICBldmFsICdhc19mbl9hcml0aCAoKQorKyAgeworKyAgICBhc192YWw9JCgoICQqICkpCisrICB9JworK2Vsc2UKKysgIGFzX2ZuX2FyaXRoICgpCisrICB7CisrICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisrICB9CisrZmkgIyBhc19mbl9hcml0aAorKworIAorLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorIGlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgIGFzX2V4cHI9ZXhwcgorQEAgLTMyNTA4LDEzICsyMDY1MCwxNyBAQCBlbHNlCisgICBhc19iYXNlbmFtZT1mYWxzZQorIGZpCisgCisraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc19kaXJuYW1lPWRpcm5hbWUKKytlbHNlCisrICBhc19kaXJuYW1lPWZhbHNlCisrZmkKKyAKKy0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCisgYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CisgJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKyAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisgCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKy1lY2hvIFgvIiQwIiB8CisrJGFzX2VjaG8gWC8iJDAiIHwKKyAgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisgCSAgICBzLy9cMS8KKyAJICAgIHEKK0BAIC0zMjUyOSwxMzEgKzIwNjc1LDExOCBAQCBlY2hvIFgvIiQwIiB8CisgCSAgfQorIAkgIHMvLiovLi87IHEnYAorIAorLSMgQ0RQQVRILgorLSRhc191bnNldCBDRFBBVEgKKy0KKy0KKy0KKy0gIGFzX2xpbmVub18xPSRMSU5FTk8KKy0gIGFzX2xpbmVub18yPSRMSU5FTk8KKy0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorLSAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CistCistICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCistICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCistICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKy0gICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCistICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCistICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCistICAjIGNhc2UgYXQgbGluZSBlbmQuCistICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKy0gICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorLSAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKy0gIHNlZCAtbiAnCistICAgIHAKKy0gICAgL1skXUxJTkVOTy89CistICAnIDwkYXNfbXlzZWxmIHwKKy0gICAgc2VkICcKKy0gICAgICBzL1skXUxJTkVOTy4qLyYtLworLSAgICAgIHQgbGluZW5vCistICAgICAgYgorLSAgICAgIDpsaW5lbm8KKy0gICAgICBOCistICAgICAgOmxvb3AKKy0gICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKy0gICAgICB0IGxvb3AKKy0gICAgICBzLy1cbi4qLy8KKy0gICAgJyA+JGFzX21lLmxpbmVubyAmJgorLSAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLQorLSAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKy0gICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKy0gIC4gIi4vJGFzX21lLmxpbmVubyIKKy0gICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorLSAgZXhpdAorLX0KKy0KKy0KKy1pZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIGFzX2Rpcm5hbWU9ZGlybmFtZQorLWVsc2UKKy0gIGFzX2Rpcm5hbWU9ZmFsc2UKKy1maQorKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKythc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKythc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKythc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKythc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCisrYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisgCisgRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKy1jYXNlIGBlY2hvIC1uIHhgIGluCisrY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKyAtbiopCistICBjYXNlIGBlY2hvICd4XGMnYCBpbgorKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKy0gICopICAgRUNIT19DPSdcYyc7OworKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisrICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisrICAgICAgIEVDSE9fVD0nCSc7OworICAgZXNhYzs7CisgKikKKyAgIEVDSE9fTj0nLW4nOzsKKyBlc2FjCisgCistaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKy0gICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorLSAgYXNfZXhwcj1leHByCistZWxzZQorLSAgYXNfZXhwcj1mYWxzZQorLWZpCistCisgcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKyBpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKyBlbHNlCisgICBybSAtZiBjb25mJCQuZGlyCistICBta2RpciBjb25mJCQuZGlyCistZmkKKy1lY2hvID5jb25mJCQuZmlsZQorLWlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorLSAgYXNfbG5fcz0nbG4gLXMnCistICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorLSAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKy0gICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorLSAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKy0gIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKy0gICAgYXNfbG5fcz0nY3AgLXAnCistZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKy0gIGFzX2xuX3M9bG4KKy1lbHNlCistICBhc19sbl9zPSdjcCAtcCcKKysgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKytmaQorK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKysgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgICBhc19sbl9zPSdsbiAtcycKKysgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKysgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisrICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisrICAgICAgYXNfbG5fcz0nY3AgLXBSJworKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKysgICAgYXNfbG5fcz1sbgorKyAgZWxzZQorKyAgICBhc19sbl9zPSdjcCAtcFInCisrICBmaQorK2Vsc2UKKysgIGFzX2xuX3M9J2NwIC1wUicKKyBmaQorIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKKyBybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisgCisrCisrIyBhc19mbl9ta2Rpcl9wCisrIyAtLS0tLS0tLS0tLS0tCisrIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCisrYXNfZm5fbWtkaXJfcCAoKQorK3sKKysKKysgIGNhc2UgJGFzX2RpciBpbiAjKAorKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworKyAgZXNhYworKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisrICAgIGFzX2RpcnM9CisrICAgIHdoaWxlIDo7IGRvCisrICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisrICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisrICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKysgICAgICBlc2FjCisrICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKysgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisrICAgIGRvbmUKKysgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKysKKysKKyt9ICMgYXNfZm5fbWtkaXJfcAorIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKy0gIGFzX21rZGlyX3A9OgorKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworIGVsc2UKKyAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICBhc19ta2Rpcl9wPWZhbHNlCisgZmkKKyAKKy1pZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBhc190ZXN0X3g9J3Rlc3QgLXgnCistZWxzZQorLSAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgIGFzX2xzX0xfb3B0aW9uPUwKKy0gIGVsc2UKKy0gICAgYXNfbHNfTF9vcHRpb249CistICBmaQorLSAgYXNfdGVzdF94PScKKy0gICAgZXZhbCBzaCAtYyAnXCcnCistICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCistICAgICAgICB0ZXN0IC1kICIkMS8uIjsKKy0gICAgICBlbHNlCistCWNhc2UgJDEgaW4KKy0gICAgICAgIC0qKXNldCAiLi8kMSI7OworLQllc2FjOworLQljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorLQk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCistICAgICdcJycgc2gKKy0gICcKKy1maQorLWFzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisrCisrIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KKythc19mbl9leGVjdXRhYmxlX3AgKCkKKyt7CisrICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCisrfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorK2FzX3Rlc3RfeD0ndGVzdCAteCcKKythc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCitAQCAtMzI2NjMsMTMgKzIwNzk2LDE5IEBAIGFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCisgZXhlYyA2PiYxCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTRU9GCisrdGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisgCistIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisgIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisgIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KKyBhY19sb2c9IgorIFRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgQ29yZUZvdW5kYXRpb24gJGFzX21lIDQ3Ni4xNy4yLCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworQEAgLTMyNjgyLDcgKzIwODIxLDE2IEBAIG9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIAorIF9BQ0VPRgorIAorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisrIiopIHNldCB4ICRhY19jb25maWdfZmlsZXM7IHNoaWZ0OyBhY19jb25maWdfZmlsZXM9JCo7OworK2VzYWMKKysKKytjYXNlICRhY19jb25maWdfaGVhZGVycyBpbiAqIgorKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7CisrZXNhYworKworKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KKyBjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCisgY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK0BAIC0zMjY5MCwyMiArMjA4MzgsMjUgQEAgY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorIAorIF9BQ0VPRgorIAorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyBhY19jc191c2FnZT0iXAorLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorLWN1cnJlbnQgY29uZmlndXJhdGlvbi4KKytcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKKytmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKKythbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisgCistVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KKytVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4KKyAKKyAgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorLSAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKysgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisrICAtcSwgLS1xdWlldCwgLS1zaWxlbnQKKysgICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKy0gIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKy0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorLSAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCistCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKysgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisrICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisrICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisgCisgQ29uZmlndXJhdGlvbiBmaWxlczoKKyAkY29uZmlnX2ZpbGVzCitAQCAtMzI3MTYsMTYgKzIwODY3LDE3IEBAICRjb25maWdfaGVhZGVycworIENvbmZpZ3VyYXRpb24gY29tbWFuZHM6CisgJGNvbmZpZ19jb21tYW5kcworIAorLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorK1JlcG9ydCBidWdzIHRvIDxiZnVsZ2hhbUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiIKKyAKKyBfQUNFT0YKKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCisgYWNfY3NfdmVyc2lvbj0iXFwKKyBDb3JlRm91bmRhdGlvbiBjb25maWcuc3RhdHVzIDQ3Ni4xNy4yCistY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLAorLSAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKytjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCisrICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKKyAKKy1Db3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisgCitAQCAtMzI3MzMsMjAgKzIwODg1LDI2IEBAIGFjX3B3ZD0nJGFjX3B3ZCcKKyBzcmNkaXI9JyRzcmNkaXInCisgSU5TVEFMTD0nJElOU1RBTEwnCisgTUtESVJfUD0nJE1LRElSX1AnCisrQVdLPSckQVdLJworK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCisgX0FDRU9GCisgCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCistIyBJZiBubyBmaWxlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIGRlZmF1bHQKKy0jIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKysjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCisgYWNfbmVlZF9kZWZhdWx0cz06Cisgd2hpbGUgdGVzdCAkIyAhPSAwCisgZG8KKyAgIGNhc2UgJDEgaW4KKy0gIC0tKj0qKQorKyAgLS0qPT8qKQorICAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisgICAgIGFjX3NoaWZ0PToKKyAgICAgOzsKKysgIC0tKj0pCisrICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisrICAgIGFjX29wdGFyZz0KKysgICAgYWNfc2hpZnQ9OgorKyAgICA7OworICAgKikKKyAgICAgYWNfb3B0aW9uPSQxCisgICAgIGFjX29wdGFyZz0kMgorQEAgLTMyNzU5LDM0ICsyMDkxNyw0MSBAQCBkbworICAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKysgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKysgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgICBkZWJ1Zz06IDs7CisgICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgICAkYWNfc2hpZnQKKy0gICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisrICAgIGNhc2UgJGFjX29wdGFyZyBpbgorKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKKysgICAgZXNhYworKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAgJGFjX3NoaWZ0CistICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKysgICAgY2FzZSAkYWNfb3B0YXJnIGluCisrICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgIGVzYWMKKysgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgIC0taGUgfCAtLWgpCisgICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCistICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCisrVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgIC0taGVscCB8IC0taGVsIHwgLWggKQorLSAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CisrICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CisgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgICBhY19jc19zaWxlbnQ9OiA7OworIAorICAgIyBUaGlzIGlzIGFuIGVycm9yLgorLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKKy1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisrICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCisrVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CisgCistICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIgorKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCisgICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisgCisgICBlc2FjCitAQCAtMzI4MDEsMjcgKzIwOTY2LDI5IEBAIGlmICRhY19jc19zaWxlbnQ7IHRoZW4KKyBmaQorIAorIF9BQ0VPRgorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgaWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCistICBlY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgJFNIRUxMICQwICIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKKy0gIENPTkZJR19TSEVMTD0kU0hFTEwKKysgIHNldCBYICRTSEVMTCAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisrICBzaGlmdAorKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKysgIENPTkZJR19TSEVMTD0nJFNIRUxMJworICAgZXhwb3J0IENPTkZJR19TSEVMTAorLSAgZXhlYyAkU0hFTEwgIiQwIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisrICBleGVjICJcJEAiCisgZmkKKyAKKyBfQUNFT0YKKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgZXhlYyA1Pj5jb25maWcubG9nCisgeworICAgZWNobworICAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyAjIyBSdW5uaW5nICRhc19tZS4gIyMKKyBfQVNCT1gKKy0gIGVjaG8gIiRhY19sb2ciCisrICAkYXNfZWNobyAiJGFjX2xvZyIKKyB9ID4mNQorIAorIF9BQ0VPRgorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIworICMgSU5JVC1DT01NQU5EUworICMKK0BAIC0zMjgzNSwxODYgKzIxMDAyLDIwOSBAQCBBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCisgc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworIGRvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKKyBkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworLW1hY3JvX3ZlcnNpb249J2AkRUNITyAiWCRtYWNyb192ZXJzaW9uIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbWFjcm9fcmV2aXNpb249J2AkRUNITyAiWCRtYWNyb19yZXZpc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWVuYWJsZV9zaGFyZWQ9J2AkRUNITyAiWCRlbmFibGVfc2hhcmVkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZW5hYmxlX3N0YXRpYz0nYCRFQ0hPICJYJGVuYWJsZV9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1waWNfbW9kZT0nYCRFQ0hPICJYJHBpY19tb2RlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICJYJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1ob3N0X2FsaWFzPSdgJEVDSE8gIlgkaG9zdF9hbGlhcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWhvc3Q9J2AkRUNITyAiWCRob3N0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaG9zdF9vcz0nYCRFQ0hPICJYJGhvc3Rfb3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1idWlsZF9hbGlhcz0nYCRFQ0hPICJYJGJ1aWxkX2FsaWFzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistYnVpbGQ9J2AkRUNITyAiWCRidWlsZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWJ1aWxkX29zPSdgJEVDSE8gIlgkYnVpbGRfb3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1TRUQ9J2AkRUNITyAiWCRTRUQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1Yc2VkPSdgJEVDSE8gIlgkWHNlZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUdSRVA9J2AkRUNITyAiWCRHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistRUdSRVA9J2AkRUNITyAiWCRFR1JFUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUZHUkVQPSdgJEVDSE8gIlgkRkdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1MRD0nYCRFQ0hPICJYJExEIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistTk09J2AkRUNITyAiWCROTSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUxOX1M9J2AkRUNITyAiWCRMTl9TIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbWF4X2NtZF9sZW49J2AkRUNITyAiWCRtYXhfY21kX2xlbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWFjX29iamV4dD0nYCRFQ0hPICJYJGFjX29iamV4dCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWV4ZWV4dD0nYCRFQ0hPICJYJGV4ZWV4dCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Vuc2V0PSdgJEVDSE8gIlgkbHRfdW5zZXQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9TUDJOTD0nYCRFQ0hPICJYJGx0X1NQMk5MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfTkwyU1A9J2AkRUNITyAiWCRsdF9OTDJTUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXJlbG9hZF9mbGFnPSdgJEVDSE8gIlgkcmVsb2FkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1yZWxvYWRfY21kcz0nYCRFQ0hPICJYJHJlbG9hZF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIlgkZmlsZV9tYWdpY19jbWQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1BUj0nYCRFQ0hPICJYJEFSIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistQVJfRkxBR1M9J2AkRUNITyAiWCRBUl9GTEFHUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLVNUUklQPSdgJEVDSE8gIlgkU1RSSVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1SQU5MSUI9J2AkRUNITyAiWCRSQU5MSUIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1vbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICJYJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICJYJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1vbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUNDPSdgJEVDSE8gIlgkQ0MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1DRkxBR1M9J2AkRUNITyAiWCRDRkxBR1MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1jb21waWxlcj0nYCRFQ0hPICJYJGNvbXBpbGVyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistR0NDPSdgJEVDSE8gIlgkR0NDIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistb2JqZGlyPSdgJEVDSE8gIlgkb2JqZGlyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistU0hFTEw9J2AkRUNITyAiWCRTSEVMTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUVDSE89J2AkRUNITyAiWCRFQ0hPIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistTUFHSUNfQ01EPSdgJEVDSE8gIlgkTUFHSUNfQ01EIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICJYJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbmVlZF9sb2Nrcz0nYCRFQ0hPICJYJG5lZWRfbG9ja3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1EU1lNVVRJTD0nYCRFQ0hPICJYJERTWU1VVElMIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistTk1FRElUPSdgJEVDSE8gIlgkTk1FRElUIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistTElQTz0nYCRFQ0hPICJYJExJUE8iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1PVE9PTD0nYCRFQ0hPICJYJE9UT09MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistT1RPT0w2ND0nYCRFQ0hPICJYJE9UT09MNjQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1saWJleHQ9J2AkRUNITyAiWCRsaWJleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1zaHJleHRfY21kcz0nYCRFQ0hPICJYJHNocmV4dF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiWCRleHRyYWN0X2V4cHN5bXNfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWFyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1lbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIlgkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICJYJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIlgkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1jb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiWCRjb21waWxlcl9uZWVkc19vYmplY3QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1hcmNoaXZlX2NtZHM9J2AkRUNITyAiWCRhcmNoaXZlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1hcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIlgkYXJjaGl2ZV9leHBzeW1fY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW1vZHVsZV9jbWRzPSdgJEVDSE8gIlgkbW9kdWxlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1tb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiWCRtb2R1bGVfZXhwc3ltX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy13aXRoX2dudV9sZD0nYCRFQ0hPICJYJHdpdGhfZ251X2xkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiWCRhbGxvd191bmRlZmluZWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW5vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIlgkbm9fdW5kZWZpbmVkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9kaXJlY3Q9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9taW51c19MPSdgJEVDSE8gIlgkaGFyZGNvZGVfbWludXNfTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiWCRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIlgkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICJYJGluaGVyaXRfcnBhdGgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1saW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIlgkbGlua19hbGxfZGVwbGlicyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiWCRmaXhfc3JjZmlsZV9wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIlgkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICJYJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1leGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiWCRleGNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1pbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1wcmVsaW5rX2NtZHM9J2AkRUNITyAiWCRwcmVsaW5rX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICJYJGZpbGVfbGlzdF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiWCR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICJYJG5lZWRfbGliX3ByZWZpeCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW5lZWRfdmVyc2lvbj0nYCRFQ0hPICJYJG5lZWRfdmVyc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXZlcnNpb25fdHlwZT0nYCRFQ0hPICJYJHZlcnNpb25fdHlwZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXJ1bnBhdGhfdmFyPSdgJEVDSE8gIlgkcnVucGF0aF92YXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIlgkc2hsaWJwYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICJYJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWxpYm5hbWVfc3BlYz0nYCRFQ0hPICJYJGxpYm5hbWVfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWxpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXNvbmFtZV9zcGVjPSdgJEVDSE8gIlgkc29uYW1lX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkcG9zdGluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXBvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICJYJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpbmlzaF9jbWRzPSdgJEVDSE8gIlgkZmluaXNoX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maW5pc2hfZXZhbD0nYCRFQ0hPICJYJGZpbmlzaF9ldmFsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIlgkaGFyZGNvZGVfaW50b19saWJzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIlgkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiWCRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWhhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICJYJGhhcmRjb2RlX2FjdGlvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWVuYWJsZV9kbG9wZW49J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZW5hYmxlX2Rsb3Blbl9zZWxmPSdgJEVDSE8gIlgkZW5hYmxlX2Rsb3Blbl9zZWxmIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1vbGRfc3RyaXBsaWI9J2AkRUNITyAiWCRvbGRfc3RyaXBsaWIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1zdHJpcGxpYj0nYCRFQ0hPICJYJHN0cmlwbGliIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSdgJEVDSE8gIlgkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistcHJlZGVwX29iamVjdHM9J2AkRUNITyAiWCRwcmVkZXBfb2JqZWN0cyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXBvc3RkZXBfb2JqZWN0cz0nYCRFQ0hPICJYJHBvc3RkZXBfb2JqZWN0cyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXByZWRlcHM9J2AkRUNITyAiWCRwcmVkZXBzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistcG9zdGRlcHM9J2AkRUNITyAiWCRwb3N0ZGVwcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0nYCRFQ0hPICJYJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUFTPSdgJEVDSE8gIlgkQVMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1ETExUT09MPSdgJEVDSE8gIlgkRExMVE9PTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLU9CSkRVTVA9J2AkRUNITyAiWCRPQkpEVU1QIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistTERfQ1hYPSdgJEVDSE8gIlgkTERfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistb2xkX2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWNvbXBpbGVyX0NYWD0nYCRFQ0hPICJYJGNvbXBpbGVyX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLUdDQ19DWFg9J2AkRUNITyAiWCRHQ0NfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICJYJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0nYCRFQ0hPICJYJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPSdgJEVDSE8gIlgkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIlgkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICJYJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWNvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9J2AkRUNITyAiWCRjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFg9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWD0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWFyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiWCRhcmNoaXZlX2NtZHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiWCRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW1vZHVsZV9jbWRzX0NYWD0nYCRFQ0hPICJYJG1vZHVsZV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLW1vZHVsZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiWCRtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistd2l0aF9nbnVfbGRfQ1hYPSdgJEVDSE8gIlgkd2l0aF9nbnVfbGRfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIlgkYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIlgkbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaGFyZGNvZGVfZGlyZWN0X0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPSdgJEVDSE8gIlgkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWhhcmRjb2RlX21pbnVzX0xfQ1hYPSdgJEVDSE8gIlgkaGFyZGNvZGVfbWludXNfTF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistaGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1pbmhlcml0X3JwYXRoX0NYWD0nYCRFQ0hPICJYJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiWCRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGhfQ1hYPSdgJEVDSE8gIlgkZml4X3NyY2ZpbGVfcGF0aF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1hbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIlgkYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIlgkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1leGNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIlgkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWluY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiWCRpbmNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICJYJHByZWxpbmtfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiWCRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1oYXJkY29kZV9hY3Rpb25fQ1hYPSdgJEVDSE8gIlgkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiWCRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistcHJlZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIlgkcHJlZGVwX29iamVjdHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistcG9zdGRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICJYJHBvc3RkZXBfb2JqZWN0c19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1wcmVkZXBzX0NYWD0nYCRFQ0hPICJYJHByZWRlcHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistcG9zdGRlcHNfQ1hYPSdgJEVDSE8gIlgkcG9zdGRlcHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0nYCRFQ0hPICJYJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyttYWNyb192ZXJzaW9uPSdgJEVDSE8gIiRtYWNyb192ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyttYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3BpY19tb2RlPSdgJEVDSE8gIiRwaWNfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICIkZW5hYmxlX2Zhc3RfaW5zdGFsbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrU0hFTEw9J2AkRUNITyAiJFNIRUxMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytFQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytQQVRIX1NFUEFSQVRPUj0nYCRFQ0hPICIkUEFUSF9TRVBBUkFUT1IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hvc3RfYWxpYXM9J2AkRUNITyAiJGhvc3RfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hvc3Q9J2AkRUNITyAiJGhvc3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2J1aWxkX2FsaWFzPSdgJEVDSE8gIiRidWlsZF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYnVpbGQ9J2AkRUNITyAiJGJ1aWxkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytidWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK1NFRD0nYCRFQ0hPICIkU0VEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytYc2VkPSdgJEVDSE8gIiRYc2VkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytHUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytFR1JFUD0nYCRFQ0hPICIkRUdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0ZHUkVQPSdgJEVDSE8gIiRGR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytOTT0nYCRFQ0hPICIkTk0iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0xOX1M9J2AkRUNITyAiJExOX1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK21heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYWNfb2JqZXh0PSdgJEVDSE8gIiRhY19vYmpleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2V4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytyZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0FSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK1NUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSdgJEVDSE8gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0NDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrQ0ZMQUdTPSdgJEVDSE8gIiRDRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2NvbXBpbGVyPSdgJEVDSE8gIiRjb21waWxlciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK29iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK05NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytPVE9PTD0nYCRFQ0hPICIkT1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK09UT09MNjQ9J2AkRUNITyAiJE9UT09MNjQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2xpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaHJleHRfY21kcz0nYCRFQ0hPICIkc2hyZXh0X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2V4dHJhY3RfZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyttb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2l0aF9nbnVfbGQ9J2AkRUNITyAiJHdpdGhfZ251X2xkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytoYXJkY29kZV9taW51c19MPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2V4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3ZlcnNpb25fdHlwZT0nYCRFQ0hPICIkdmVyc2lvbl90eXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytydW5wYXRoX3Zhcj0nYCRFQ0hPICIkcnVucGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsaWJuYW1lX3NwZWM9J2AkRUNITyAiJGxpYm5hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NvbmFtZV9zcGVjPSdgJEVDSE8gIiRzb25hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraW5zdGFsbF9vdmVycmlkZV9tb2RlPSdgJEVDSE8gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaW5pc2hfY21kcz0nYCRFQ0hPICIkZmluaXNoX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytlbmFibGVfZGxvcGVuPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX3N0cmlwbGliPSdgJEVDSE8gIiRvbGRfc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3N0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3ByZWRlcF9vYmplY3RzPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGRlcF9vYmplY3RzPSdgJEVDSE8gIiRwb3N0ZGVwX29iamVjdHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3ByZWRlcHM9J2AkRUNITyAiJHByZWRlcHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RkZXBzPSdgJEVDSE8gIiRwb3N0ZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0FTPSdgJEVDSE8gIiRBUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTERfQ1hYPSdgJEVDSE8gIiRMRF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3JlbG9hZF9mbGFnX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytyZWxvYWRfY21kc19DWFg9J2AkRUNITyAiJHJlbG9hZF9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytjb21waWxlcl9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrR0NDX0NYWD0nYCRFQ0hPICIkR0NDX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK21vZHVsZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dpdGhfZ251X2xkX0NYWD0nYCRFQ0hPICIkd2l0aF9nbnVfbGRfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytoYXJkY29kZV9kaXJlY3RfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2hhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsaW5rX2FsbF9kZXBsaWJzX0NYWD0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlic19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisraGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcHJlZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3ByZWRlcHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGRlcHNfQ1hYPSdgJEVDSE8gIiRwb3N0ZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIAorIExUQ0M9JyRMVENDJworIExUQ0ZMQUdTPSckTFRDRkxBR1MnCisgY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworIAorKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KKytmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyt7CisrICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorK1wkMQorK19MVEVDSE9fRU9GJworK30KKysKKyAjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorLWZvciB2YXIgaW4gU0VEIFwKKytmb3IgdmFyIGluIFNIRUxMIFwKKytFQ0hPIFwKKytQQVRIX1NFUEFSQVRPUiBcCisrU0VEIFwKKyBHUkVQIFwKKyBFR1JFUCBcCisgRkdSRVAgXAorQEAgLTMzMDI0LDEwICsyMTIxNCwxNiBAQCBMTl9TIFwKKyBsdF9TUDJOTCBcCisgbHRfTkwyU1AgXAorIHJlbG9hZF9mbGFnIFwKKytPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0zMzAzNywxNCArMjEyMzMsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKy1TSEVMTCBcCistRUNITyBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0zMzA1OCw5ICsyMTI1NCw3IEBAIHdpdGhfZ251X2xkIFwKKyBhbGxvd191bmRlZmluZWRfZmxhZyBcCisgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMzMwNjgsNiArMjEyNjIsNyBAQCB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBcCisgbGlibmFtZV9zcGVjIFwKKyBsaWJyYXJ5X25hbWVzX3NwZWMgXAorIHNvbmFtZV9zcGVjIFwKKytpbnN0YWxsX292ZXJyaWRlX21vZGUgXAorIGZpbmlzaF9ldmFsIFwKKyBvbGRfc3RyaXBsaWIgXAorIHN0cmlwbGliIFwKK0BAIC0zMzA3NywxMSArMjEyNzIsMTMgQEAgcG9zdGRlcF9vYmplY3RzIFwKKyBwcmVkZXBzIFwKKyBwb3N0ZGVwcyBcCisgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKKytBUyBcCisgTERfQ1hYIFwKKytyZWxvYWRfZmxhZ19DWFggXAorIGNvbXBpbGVyX0NYWCBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCisgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAorIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAorQEAgLTMzMDkxLDkgKzIxMjg4LDcgQEAgd2l0aF9nbnVfbGRfQ1hYIFwKKyBhbGxvd191bmRlZmluZWRfZmxhZ19DWFggXAorIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAorLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCistZml4X3NyY2ZpbGVfcGF0aF9DWFggXAorIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAorIGluY2x1ZGVfZXhwc3ltc19DWFggXAorIGZpbGVfbGlzdF9zcGVjX0NYWCBcCitAQCAtMzMxMDMsOSArMjEyOTgsOSBAQCBwb3N0ZGVwX29iamVjdHNfQ1hYIFwKKyBwcmVkZXBzX0NYWCBcCisgcG9zdGRlcHNfQ1hYIFwKKyBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYOyBkbworLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKysgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCistICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKK0BAIC0zMzEyNywxMSArMjEzMjIsMTMgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKKyBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKytyZWxvYWRfY21kc19DWFggXAorIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKKyBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCisgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIFwKK0BAIC0zMzE0MCwxMCArMjEzMzcsMTEgQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorIG1vZHVsZV9jbWRzX0NYWCBcCisgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCisgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorLXByZWxpbmtfY21kc19DWFg7IGRvCistICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorK3ByZWxpbmtfY21kc19DWFggXAorK3Bvc3RsaW5rX2NtZHNfQ1hYOyBkbworKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKy0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisrICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgICA7OworICAgICAqKQorICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorQEAgLTMzMTUxLDEyICsyMTM0OSw2IEBAIHByZWxpbmtfY21kc19DWFg7IGRvCisgICAgIGVzYWMKKyBkb25lCisgCistIyBGaXgtdXAgZmFsbGJhY2sgZWNobyBpZiBpdCB3YXMgbWFuZ2xlZCBieSB0aGUgYWJvdmUgcXVvdGluZyBydWxlcy4KKy1jYXNlIFwkbHRfRUNITyBpbgorLSonXFxcJDAgLS1mYWxsYmFjay1lY2hvIicpICBsdF9FQ0hPPVxgXCRFQ0hPICJYXCRsdF9FQ0hPIiB8IFwkWHNlZCAtZSAncy9cXFxcXFxcXFxcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iXCQvXCQwIC0tZmFsbGJhY2stZWNobyIvJ1xgCistICA7OworLWVzYWMKKy0KKyBhY19hdXhfZGlyPSckYWNfYXV4X2RpcicKKyB4c2lfc2hlbGw9JyR4c2lfc2hlbGwnCisgbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJworQEAgLTMzMTgxLDcgKzIxMzczLDcgQEAgZmkKKyAKKyBfQUNFT0YKKyAKKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgCisgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCisgZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitAQCAtMzMyMDgsOSArMjE0MDAsNyBAQCBkbworICAgICAiZXhhbXBsZXMvU3RyaW5nRXhhbXBsZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlIiA7OworICAgICAiZXhhbXBsZXMvV3JpdGVQTGlzdEV4YW1wbGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXhhbXBsZXMvV3JpdGVQTGlzdEV4YW1wbGUvTWFrZWZpbGUiIDs7CisgCistICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OworICAgZXNhYworIGRvbmUKKyAKK0BAIC0zMzIzMywyOTEgKzIxNDIzLDMwMiBAQCBmaQorICMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorICRkZWJ1ZyB8fAorIHsKKy0gIHRtcD0KKysgIHRtcD0gYWNfdG1wPQorICAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKy0gIHsgdGVzdCAteiAiJHRtcCIgfHwgdGVzdCAhIC1kICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisrICA6ICIke2FjX3RtcDo9JHRtcH0iCisrICB7IHRlc3QgISAtZCAiJGFjX3RtcCIgfHwgcm0gLWZyICIkYWNfdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworICcgMAorLSAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKysgIHRyYXAgJ2FzX2ZuX2V4aXQgMScgMSAyIDEzIDE1CisgfQorICMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorIAorIHsKKyAgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorLSAgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIKKysgIHRlc3QgLWQgIiR0bXAiCisgfSAgfHwKKyB7CisgICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCistfSB8fAorLXsKKy0gICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iID4mMgorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorLX0KKy0KKy0jCistIyBTZXQgdXAgdGhlIHNlZCBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKy0jCisrfSB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKKythY190bXA9JHRtcAorIAorLSMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorLSMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKysjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgorIGlmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisgCistX0FDRU9GCisgCisrYWNfY3I9YGVjaG8gWCB8IHRyIFggJ1wwMTUnYAorKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKysjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKysjIHBvaW50LCBzbyB3ZSBjYW4gdXNlIGEgYmFzaGlzbSBhcyBhIGZhbGxiYWNrLgorK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKKytmaQorK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKKytpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorKyAgYWNfY3NfYXdrX2NyPSdcXHInCisrZWxzZQorKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorK2ZpCisrCisrZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKKytfQUNFT0YKKyAKKyAKKyt7CisrICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorKyAgZWNobyAiX0FDRU9GIgorK30gPmNvbmYkJHN1YnMuc2ggfHwKKysgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKythY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJ14nYAorIGFjX2RlbGltPSclIV8hIyAnCisgZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCistICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCistU0hFTEwhJFNIRUxMJGFjX2RlbGltCistUEFUSF9TRVBBUkFUT1IhJFBBVEhfU0VQQVJBVE9SJGFjX2RlbGltCistUEFDS0FHRV9OQU1FISRQQUNLQUdFX05BTUUkYWNfZGVsaW0KKy1QQUNLQUdFX1RBUk5BTUUhJFBBQ0tBR0VfVEFSTkFNRSRhY19kZWxpbQorLVBBQ0tBR0VfVkVSU0lPTiEkUEFDS0FHRV9WRVJTSU9OJGFjX2RlbGltCistUEFDS0FHRV9TVFJJTkchJFBBQ0tBR0VfU1RSSU5HJGFjX2RlbGltCistUEFDS0FHRV9CVUdSRVBPUlQhJFBBQ0tBR0VfQlVHUkVQT1JUJGFjX2RlbGltCistZXhlY19wcmVmaXghJGV4ZWNfcHJlZml4JGFjX2RlbGltCistcHJlZml4ISRwcmVmaXgkYWNfZGVsaW0KKy1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lISRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lJGFjX2RlbGltCistYmluZGlyISRiaW5kaXIkYWNfZGVsaW0KKy1zYmluZGlyISRzYmluZGlyJGFjX2RlbGltCistbGliZXhlY2RpciEkbGliZXhlY2RpciRhY19kZWxpbQorLWRhdGFyb290ZGlyISRkYXRhcm9vdGRpciRhY19kZWxpbQorLWRhdGFkaXIhJGRhdGFkaXIkYWNfZGVsaW0KKy1zeXNjb25mZGlyISRzeXNjb25mZGlyJGFjX2RlbGltCistc2hhcmVkc3RhdGVkaXIhJHNoYXJlZHN0YXRlZGlyJGFjX2RlbGltCistbG9jYWxzdGF0ZWRpciEkbG9jYWxzdGF0ZWRpciRhY19kZWxpbQorLWluY2x1ZGVkaXIhJGluY2x1ZGVkaXIkYWNfZGVsaW0KKy1vbGRpbmNsdWRlZGlyISRvbGRpbmNsdWRlZGlyJGFjX2RlbGltCistZG9jZGlyISRkb2NkaXIkYWNfZGVsaW0KKy1pbmZvZGlyISRpbmZvZGlyJGFjX2RlbGltCistaHRtbGRpciEkaHRtbGRpciRhY19kZWxpbQorLWR2aWRpciEkZHZpZGlyJGFjX2RlbGltCistcGRmZGlyISRwZGZkaXIkYWNfZGVsaW0KKy1wc2RpciEkcHNkaXIkYWNfZGVsaW0KKy1saWJkaXIhJGxpYmRpciRhY19kZWxpbQorLWxvY2FsZWRpciEkbG9jYWxlZGlyJGFjX2RlbGltCistbWFuZGlyISRtYW5kaXIkYWNfZGVsaW0KKy1ERUZTISRERUZTJGFjX2RlbGltCistRUNIT19DISRFQ0hPX0MkYWNfZGVsaW0KKy1FQ0hPX04hJEVDSE9fTiRhY19kZWxpbQorLUVDSE9fVCEkRUNIT19UJGFjX2RlbGltCistTElCUyEkTElCUyRhY19kZWxpbQorLWJ1aWxkX2FsaWFzISRidWlsZF9hbGlhcyRhY19kZWxpbQorLWhvc3RfYWxpYXMhJGhvc3RfYWxpYXMkYWNfZGVsaW0KKy10YXJnZXRfYWxpYXMhJHRhcmdldF9hbGlhcyRhY19kZWxpbQorLUNGX1ZFUlNJT05fSU5GTyEkQ0ZfVkVSU0lPTl9JTkZPJGFjX2RlbGltCistSU5TVEFMTF9QUk9HUkFNISRJTlNUQUxMX1BST0dSQU0kYWNfZGVsaW0KKy1JTlNUQUxMX1NDUklQVCEkSU5TVEFMTF9TQ1JJUFQkYWNfZGVsaW0KKy1JTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQorLWFtX19pc3JjISRhbV9faXNyYyRhY19kZWxpbQorLUNZR1BBVEhfVyEkQ1lHUEFUSF9XJGFjX2RlbGltCistUEFDS0FHRSEkUEFDS0FHRSRhY19kZWxpbQorLVZFUlNJT04hJFZFUlNJT04kYWNfZGVsaW0KKy1BQ0xPQ0FMISRBQ0xPQ0FMJGFjX2RlbGltCistQVVUT0NPTkYhJEFVVE9DT05GJGFjX2RlbGltCistQVVUT01BS0UhJEFVVE9NQUtFJGFjX2RlbGltCistQVVUT0hFQURFUiEkQVVUT0hFQURFUiRhY19kZWxpbQorLU1BS0VJTkZPISRNQUtFSU5GTyRhY19kZWxpbQorLWluc3RhbGxfc2ghJGluc3RhbGxfc2gkYWNfZGVsaW0KKy1TVFJJUCEkU1RSSVAkYWNfZGVsaW0KKy1JTlNUQUxMX1NUUklQX1BST0dSQU0hJElOU1RBTExfU1RSSVBfUFJPR1JBTSRhY19kZWxpbQorLW1rZGlyX3AhJG1rZGlyX3AkYWNfZGVsaW0KKy1BV0shJEFXSyRhY19kZWxpbQorLVNFVF9NQUtFISRTRVRfTUFLRSRhY19kZWxpbQorLWFtX19sZWFkaW5nX2RvdCEkYW1fX2xlYWRpbmdfZG90JGFjX2RlbGltCistQU1UQVIhJEFNVEFSJGFjX2RlbGltCistYW1fX3RhciEkYW1fX3RhciRhY19kZWxpbQorLWFtX191bnRhciEkYW1fX3VudGFyJGFjX2RlbGltCistTUFJTlRBSU5FUl9NT0RFX1RSVUUhJE1BSU5UQUlORVJfTU9ERV9UUlVFJGFjX2RlbGltCistTUFJTlRBSU5FUl9NT0RFX0ZBTFNFISRNQUlOVEFJTkVSX01PREVfRkFMU0UkYWNfZGVsaW0KKy1NQUlOVCEkTUFJTlQkYWNfZGVsaW0KKy1idWlsZCEkYnVpbGQkYWNfZGVsaW0KKy1idWlsZF9jcHUhJGJ1aWxkX2NwdSRhY19kZWxpbQorLWJ1aWxkX3ZlbmRvciEkYnVpbGRfdmVuZG9yJGFjX2RlbGltCistYnVpbGRfb3MhJGJ1aWxkX29zJGFjX2RlbGltCistaG9zdCEkaG9zdCRhY19kZWxpbQorLWhvc3RfY3B1ISRob3N0X2NwdSRhY19kZWxpbQorLWhvc3RfdmVuZG9yISRob3N0X3ZlbmRvciRhY19kZWxpbQorLWhvc3Rfb3MhJGhvc3Rfb3MkYWNfZGVsaW0KKy1DQyEkQ0MkYWNfZGVsaW0KKy1DRkxBR1MhJENGTEFHUyRhY19kZWxpbQorLUxERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KKy1DUFBGTEFHUyEkQ1BQRkxBR1MkYWNfZGVsaW0KKy1hY19jdF9DQyEkYWNfY3RfQ0MkYWNfZGVsaW0KKy1FWEVFWFQhJEVYRUVYVCRhY19kZWxpbQorLU9CSkVYVCEkT0JKRVhUJGFjX2RlbGltCistREVQRElSISRERVBESVIkYWNfZGVsaW0KKy1hbV9faW5jbHVkZSEkYW1fX2luY2x1ZGUkYWNfZGVsaW0KKy1hbV9fcXVvdGUhJGFtX19xdW90ZSRhY19kZWxpbQorLUFNREVQX1RSVUUhJEFNREVQX1RSVUUkYWNfZGVsaW0KKy1BTURFUF9GQUxTRSEkQU1ERVBfRkFMU0UkYWNfZGVsaW0KKy1BTURFUEJBQ0tTTEFTSCEkQU1ERVBCQUNLU0xBU0gkYWNfZGVsaW0KKy1DQ0RFUE1PREUhJENDREVQTU9ERSRhY19kZWxpbQorLWFtX19mYXN0ZGVwQ0NfVFJVRSEkYW1fX2Zhc3RkZXBDQ19UUlVFJGFjX2RlbGltCistYW1fX2Zhc3RkZXBDQ19GQUxTRSEkYW1fX2Zhc3RkZXBDQ19GQUxTRSRhY19kZWxpbQorLUNYWCEkQ1hYJGFjX2RlbGltCistQ1hYRkxBR1MhJENYWEZMQUdTJGFjX2RlbGltCistYWNfY3RfQ1hYISRhY19jdF9DWFgkYWNfZGVsaW0KKy1DWFhERVBNT0RFISRDWFhERVBNT0RFJGFjX2RlbGltCistYW1fX2Zhc3RkZXBDWFhfVFJVRSEkYW1fX2Zhc3RkZXBDWFhfVFJVRSRhY19kZWxpbQorLWFtX19mYXN0ZGVwQ1hYX0ZBTFNFISRhbV9fZmFzdGRlcENYWF9GQUxTRSRhY19kZWxpbQorLUNQUCEkQ1BQJGFjX2RlbGltCistTElCVE9PTCEkTElCVE9PTCRhY19kZWxpbQorLVNFRCEkU0VEJGFjX2RlbGltCistR1JFUCEkR1JFUCRhY19kZWxpbQorLV9BQ0VPRgorKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKysgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorIAorLSAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5NzsgdGhlbgorKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKysgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgIGJyZWFrCisgICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgIGVsc2UKKyAgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgIGZpCisgZG9uZQorK3JtIC1mIGNvbmYkJHN1YnMuc2gKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCisrX0FDRU9GCisrc2VkIC1uICcKKytoCisrcy9eL1NbIi87IHMvIS4qLyJdPS8KKytwCisrZworK3MvXlteIV0qIS8vCisrOnJlcGwKKyt0IHJlcGwKKytzLyciJGFjX2RlbGltIickLy8KKyt0IGRlbGltCisrOm5sCisraAorK3MvXCguXHsxNDhcfVwpLi4qL1wxLworK3QgbW9yZTEKKytzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCisrcAorK24KKytiIHJlcGwKKys6bW9yZTEKKytzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCisrcAorK2cKKytzLy5cezE0OFx9Ly8KKyt0IG5sCisrOmRlbGltCisraAorK3MvXCguXHsxNDhcfVwpLi4qL1wxLworK3QgbW9yZTIKKytzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworK3AKKytiCisrOm1vcmUyCisrcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworK3AKKytnCisrcy8uXHsxNDhcfS8vCisrdCBkZWxpbQorKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKysvXlteIiJdL3sKKysgIE4KKysgIHMvXG4vLworK30KKysnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisrcm0gLWYgY29uZiQkc3Vicy5hd2sKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytfQUNBV0sKKytjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKysgIEZTID0gIgciCisgCistYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCistaWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKy0gIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCistICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCistZmkKKyt9CisreworKyAgbGluZSA9ICQgMAorKyAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCisrICBzdWJzdGVkID0gMAorKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorKyAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgeworKyAgICBrZXkgPSBmaWVsZFtpXQorKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorKyAgICBpZiAoU19pc19zZXRba2V5XSkgeworKyAgICAgIHZhbHVlID0gU1trZXldCisrICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorKyAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCisrICAgICAgc3Vic3RlZCA9IDEKKysgICAgfSBlbHNlCisrICAgICAgbGVuICs9IDEgKyBrZXlsZW4KKysgIH0KKyAKKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorLWNhdCA+IlwkdG1wL3N1YnMtMS5zZWQiIDw8XENFT0YkYWNfZW9mCistL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorKyAgcHJpbnQgbGluZQorK30KKysKKytfQUNBV0sKKyBfQUNFT0YKKy1zZWQgJworLXMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKKy1zL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCistOm4KKy10IG4KKy1zLyciJGFjX2RlbGltIickLyxnLzsgdAorLXMvJC9cXC87IHAKKy1OOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgorLScgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKKy1ybSAtZiBjb25mJCRzdWJzLnNlZAorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCistQ0VPRiRhY19lb2YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorK2Vsc2UKKysgIGNhdAorK2ZpIDwgIiRhY190bXAvc3ViczEuYXdrIiA+ICIkYWNfdG1wL3N1YnMuYXdrIiBcCisrICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CisgX0FDRU9GCisgCisrIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKysjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZW50cmllcyBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisrIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKysjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCisraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CisraAorK3MvLy8KKytzL14vOi8KKytzL1sJIF0qJC86LworK3MvOlwkKHNyY2Rpcik6LzovZworK3MvOlwke3NyY2Rpcn06LzovZworK3MvOkBzcmNkaXJAOi86L2cKKytzL146Ki8vCisrcy86KiQvLworK3gKKytzL1woPVsJIF0qXCkuKi9cMS8KKytHCisrcy9cbi8vCisrcy9eW149XSo9WwkgXSokLy8KKyt9JworK2ZpCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKyAKKy1hY19kZWxpbT0nJSFfISMgJworLWZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworLSAgY2F0ID5jb25mJCRzdWJzLnNlZCA8PF9BQ0VPRgorLUVHUkVQISRFR1JFUCRhY19kZWxpbQorLUZHUkVQISRGR1JFUCRhY19kZWxpbQorLUxEISRMRCRhY19kZWxpbQorLURVTVBCSU4hJERVTVBCSU4kYWNfZGVsaW0KKy1hY19jdF9EVU1QQklOISRhY19jdF9EVU1QQklOJGFjX2RlbGltCistTk0hJE5NJGFjX2RlbGltCistTE5fUyEkTE5fUyRhY19kZWxpbQorLUFSISRBUiRhY19kZWxpbQorLVJBTkxJQiEkUkFOTElCJGFjX2RlbGltCistbHRfRUNITyEkbHRfRUNITyRhY19kZWxpbQorLURTWU1VVElMISREU1lNVVRJTCRhY19kZWxpbQorLU5NRURJVCEkTk1FRElUJGFjX2RlbGltCistTElQTyEkTElQTyRhY19kZWxpbQorLU9UT09MISRPVE9PTCRhY19kZWxpbQorLU9UT09MNjQhJE9UT09MNjQkYWNfZGVsaW0KKy1DWFhDUFAhJENYWENQUCRhY19kZWxpbQorLUNNUCEkQ01QJGFjX2RlbGltCistQVMhJEFTJGFjX2RlbGltCistRExMVE9PTCEkRExMVE9PTCRhY19kZWxpbQorLU9CSkRVTVAhJE9CSkRVTVAkYWNfZGVsaW0KKy1DRl9CVUlMRF9ERUJVR19UUlVFISRDRl9CVUlMRF9ERUJVR19UUlVFJGFjX2RlbGltCistQ0ZfQlVJTERfREVCVUdfRkFMU0UhJENGX0JVSUxEX0RFQlVHX0ZBTFNFJGFjX2RlbGltCistQ0ZfQlVJTERfUFJPRklMRV9UUlVFISRDRl9CVUlMRF9QUk9GSUxFX1RSVUUkYWNfZGVsaW0KKy1DRl9CVUlMRF9QUk9GSUxFX0ZBTFNFISRDRl9CVUlMRF9QUk9GSUxFX0ZBTFNFJGFjX2RlbGltCistQ0ZfQlVJTERfVEVTVFNfVFJVRSEkQ0ZfQlVJTERfVEVTVFNfVFJVRSRhY19kZWxpbQorLUNGX0JVSUxEX1RFU1RTX0ZBTFNFISRDRl9CVUlMRF9URVNUU19GQUxTRSRhY19kZWxpbQorLVBLR19DT05GSUchJFBLR19DT05GSUckYWNfZGVsaW0KKy1JQ1VfQ09ORklHISRJQ1VfQ09ORklHJGFjX2RlbGltCistSUNVX0NQUEZMQUdTISRJQ1VfQ1BQRkxBR1MkYWNfZGVsaW0KKy1JQ1VfTERGTEFHUyEkSUNVX0xERkxBR1MkYWNfZGVsaW0KKy1JQ1VfTElCUyEkSUNVX0xJQlMkYWNfZGVsaW0KKy1VVUlEX0NPTkZJRyEkVVVJRF9DT05GSUckYWNfZGVsaW0KKy1VVUlEX0NQUEZMQUdTISRVVUlEX0NQUEZMQUdTJGFjX2RlbGltCistVVVJRF9MREZMQUdTISRVVUlEX0xERkxBR1MkYWNfZGVsaW0KKy1VVUlEX0xJQlMhJFVVSURfTElCUyRhY19kZWxpbQorLWFjeF9wdGhyZWFkX2NvbmZpZyEkYWN4X3B0aHJlYWRfY29uZmlnJGFjX2RlbGltCistUFRIUkVBRF9DQyEkUFRIUkVBRF9DQyRhY19kZWxpbQorLVBUSFJFQURfTElCUyEkUFRIUkVBRF9MSUJTJGFjX2RlbGltCistUFRIUkVBRF9DRkxBR1MhJFBUSFJFQURfQ0ZMQUdTJGFjX2RlbGltCistQUxMT0NBISRBTExPQ0EkYWNfZGVsaW0KKy1MSUJPQkpTISRMSUJPQkpTJGFjX2RlbGltCistTFRMSUJPQkpTISRMVExJQk9CSlMkYWNfZGVsaW0KKysjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKysjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisrIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCisraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorK0JFR0lOIHsKKyBfQUNFT0YKKyAKKy0gIGlmIHRlc3QgYHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5zZWQgfCBncmVwIC1jIFhgID0gNDI7IHRoZW4KKysjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKysjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisrCisrIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KKythY19kZWxpbT0nJSFfISMgJworK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgorICAgICBicmVhaworICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKy0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICAgZWxzZQorICAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICAgZmkKKyBkb25lCisgCistYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCistaWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKy0gIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCistICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCistZmkKKysjIEZvciB0aGUgYXdrIHNjcmlwdCwgRCBpcyBhbiBhcnJheSBvZiBtYWNybyB2YWx1ZXMga2V5ZWQgYnkgbmFtZSwKKysjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKysjIG5ld2xpbmUgc2VxdWVuY2VzLgorIAorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCistY2F0ID4iXCR0bXAvc3Vicy0yLnNlZCIgPDxcQ0VPRiRhY19lb2YKKy0vQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiIGVuZAorLV9BQ0VPRgorLXNlZCAnCistcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZworLXMvXi9zLEAvOyBzLyEvQCx8I18hIV8jfC8KKy06bgorLXQgbgorLXMvJyIkYWNfZGVsaW0iJyQvLGcvOyB0Cistcy8kL1xcLzsgcAorLU47IHMvXi4qXG4vLzsgcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZzsgYiBuCistJyA+PiRDT05GSUdfU1RBVFVTIDxjb25mJCRzdWJzLnNlZAorLXJtIC1mIGNvbmYkJHN1YnMuc2VkCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKy06ZW5kCistcy98I18hIV8jfC8vZworLUNFT0YkYWNfZW9mCisrYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKKytzZWQgLW4gJworK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZworK3QgcnNldAorKzpyc2V0Cisrcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KKyt0IGRlZgorK2QKKys6ZGVmCisrcy9cXCQvLworK3QgYnNubAorK3MvWyJcXF0vXFwmL2cKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKKytEWyJcMSJdPSIgXDMiL3AKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorK2QKKys6YnNubAorK3MvWyJcXF0vXFwmL2cKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKKytEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKKyt0IGNvbnQKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAorK3QgY29udAorK2QKKys6Y29udAorK24KKytzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKKyt0IGNsZWFyCisrOmNsZWFyCisrcy9cXCQvLworK3QgYnNubGMKKytzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKKytkCisrOmJzbmxjCisrcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCisrYiBjb250CisrJyA8Y29uZmRlZnMuaCB8IHNlZCAnCisrcy8nIiRhY19kZWxpbSInLyJcXFwKKysiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorKyAgRlMgPSAiByIKKyt9CisrL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisrICBsaW5lID0gXCQgMAorKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisrICBpZiAoYXJnWzFdID09ICIjIikgeworKyAgICBkZWZ1bmRlZiA9IGFyZ1syXQorKyAgICBtYWMxID0gYXJnWzNdCisrICB9IGVsc2UgeworKyAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCisrICAgIG1hYzEgPSBhcmdbMl0KKysgIH0KKysgIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKKysgIG1hY3JvID0gbWFjMlsxXQorKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisrICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7CisrICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisrICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKysgICAgbmV4dAorKyAgfSBlbHNlIHsKKysgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorKyAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisrICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworKyAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKKysgICAgICBuZXh0CisrICAgIH0KKysgIH0KKyt9CisreyBwcmludCB9CisrX0FDQVdLCisgX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiICIkTElORU5PIiA1CisrZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisgCisgCistIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCistIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKy0jIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorLSMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KKy1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorLSAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97Cistcy86KlwkKHNyY2Rpcik6Ki86LworLXMvOipcJHtzcmNkaXJ9OiovOi8KKy1zLzoqQHNyY2RpckA6Ki86LworLXMvXlwoW149XSo9WwkgXSpcKToqL1wxLworLXMvOiokLy8KKy1zL15bXj1dKj1bCSBdKiQvLworLX0nCistZmkKKy0KKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKy1maSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCistCistCistZm9yIGFjX3RhZyBpbiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMKKytldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgICA6QyAkQ09ORklHX0NPTU1BTkRTIgorK3NoaWZ0CisrZm9yIGFjX3RhZworIGRvCisgICBjYXNlICRhY190YWcgaW4KKyAgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICAgZXNhYworICAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgIDpbRkhMXSo6Kik7OworLSAgOkwqIHwgOkMqOiopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEludmFsaWQgdGFnICRhY190YWcuIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKyAgOkwqIHwgOkMqOiopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVOTyIgNTs7CisgICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgIGVzYWMKK0BAIC0zMzUzNiw3ICsyMTczNyw3IEBAIGVjaG8gIiRhc19tZTogZXJyb3I6IEludmFsaWQgdGFnICRhY190YWcuIiA+JjI7fQorICAgICBmb3IgYWNfZgorICAgICBkbworICAgICAgIGNhc2UgJGFjX2YgaW4KKy0gICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7CisrICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCisgCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKyAJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCitAQCAtMzM1NDUsMjYgKzIxNzQ2LDM0IEBAIGVjaG8gIiRhc19tZTogZXJyb3I6IEludmFsaWQgdGFnICRhY190YWcuIiA+JjI7fQorIAkgICBbXFwvJF0qKSBmYWxzZTs7CisgCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKyAJICAgZXNhYyB8fAorLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mMjt9CistICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysJICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1OzsKKyAgICAgICBlc2FjCistICAgICAgYWNfZmlsZV9pbnB1dHM9IiRhY19maWxlX2lucHV0cyAkYWNfZiIKKysgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisrICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICAgZG9uZQorIAorICAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCistICAgIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGZyb20gImBJRlM9OgorLQkgIGVjaG8gJCogfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJ2AiIGJ5IGNvbmZpZ3VyZS4iCisrICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKysJICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKKysJYCcgYnkgY29uZmlndXJlLicKKyAgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgICBmaQorKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKysgICAgKlwmKiB8ICpcfCogfCAqXFwqICkKKysgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisrICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorKyAgICAqKSBhY19zZWRfY29uZl9pbnB1dD0kY29uZmlndXJlX2lucHV0OzsKKysgICAgZXNhYworIAorICAgICBjYXNlICRhY190YWcgaW4KKy0gICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iOzsKKysgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKysgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICAgZXNhYworICAgICA7OworICAgZXNhYworQEAgLTMzNTc0LDQyICsyMTc4Myw3IEBAICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKyAJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWCIkYWNfZmlsZSIgfAorLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworLQkgICAgcy8vXDEvCistCSAgICBxCistCSAgfQorLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKy0JICAgIHMvL1wxLworLQkgICAgcQorLQkgIH0KKy0JICAvXlhcKFwvXC9cKSQveworLQkgICAgcy8vXDEvCistCSAgICBxCistCSAgfQorLQkgIC9eWFwoXC9cKS4qL3sKKy0JICAgIHMvL1wxLworLQkgICAgcQorLQkgIH0KKy0JICBzLy4qLy4vOyBxJ2AKKy0gIHsgYXNfZGlyPSIkYWNfZGlyIgorLSAgY2FzZSAkYXNfZGlyIGluICMoCistICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CistICBlc2FjCistICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7CistICAgIGFzX2RpcnM9CistICAgIHdoaWxlIDo7IGRvCistICAgICAgY2FzZSAkYXNfZGlyIGluICMoCistICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAorLSAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CistICAgICAgZXNhYworLSAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCistICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKy0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWCIkYXNfZGlyIiB8CisrJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworIAkgICAgcy8vXDEvCisgCSAgICBxCitAQCAtMzM2MjcsMjAgKzIxODAxLDE1IEBAIGVjaG8gWCIkYXNfZGlyIiB8CisgCSAgICBxCisgCSAgfQorIAkgIHMvLiovLi87IHEnYAorLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCistICAgIGRvbmUKKy0gICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKKy1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjI7fQorLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICAgYWNfYnVpbGRkaXI9LgorIAorIGNhc2UgIiRhY19kaXIiIGluCisgLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgKikKKy0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKysgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCistICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKK0BAIC0zMzY4NSwxMiArMjE4NTQsMTIgQEAgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgZXNhYworIF9BQ0VPRgorIAorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisgIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCisgYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CistCistY2FzZSBgc2VkIC1uICcvZGF0YXJvb3RkaXIvIHsKKythY19zZWRfZGF0YXJvb3Q9JworKy9kYXRhcm9vdGRpci8geworICAgcAorICAgcQorIH0KK0BAIC0zMzY5OCwzNiArMjE4NjcsMzcgQEAgY2FzZSBgc2VkIC1uICcvZGF0YXJvb3RkaXIvIHsKKyAvQGRvY2RpckAvcAorIC9AaW5mb2RpckAvcAorIC9AbG9jYWxlZGlyQC9wCistL0BtYW5kaXJAL3AKKy0nICRhY19maWxlX2lucHV0c2AgaW4KKysvQG1hbmRpckAvcCcKKytjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCisgKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworICpAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CisgX0FDRU9GCistY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICAgcyZAZGF0YWRpckAmJGRhdGFkaXImZworICAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKyAgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCisgICBzJkBtYW5kaXJAJiRtYW5kaXImZworLSAgICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OworKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKyBlc2FjCisgX0FDRU9GCisgCisgIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorICMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorICMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKy1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorLSAgc2VkICIkYWNfdnBzdWIKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKythY19zZWRfZXh0cmE9IiRhY192cHN1YgorICRleHRyYXN1YgorIF9BQ0VPRgorLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyA6dAorIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKKy1zJkBjb25maWd1cmVfaW5wdXRAJiRjb25maWd1cmVfaW5wdXQmO3QgdAorK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKKyBzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKKytzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CisgcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKKyBzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CisgcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorQEAgLTMzNzM4LDEyMSArMjE5MDgsNTEgQEAgcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorIHMmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKKyBzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CisgJGFjX2RhdGFyb290ZGlyX2hhY2sKKy0iICRhY19maWxlX2lucHV0cyB8IHNlZCAtZiAiJHRtcC9zdWJzLTEuc2VkIiB8IHNlZCAtZiAiJHRtcC9zdWJzLTIuc2VkIiA+JHRtcC9vdXQKKysiCisrZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorKyAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIAorIHRlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCistICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorLSAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCistICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKKy13aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworLXdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CistCistICBybSAtZiAiJHRtcC9zdGRpbiIKKysgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisrICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisrICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCisrd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorKworKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCisgICBjYXNlICRhY19maWxlIGluCistICAtKSBjYXQgIiR0bXAvb3V0Ijsgcm0gLWYgIiR0bXAvb3V0Ijs7CistICAqKSBybSAtZiAiJGFjX2ZpbGUiOyBtdiAiJHRtcC9vdXQiICRhY19maWxlOzsKKy0gIGVzYWMKKysgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OworKyAgZXNhYyBcCisrICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgOzsKKyAgIDpIKQorICAgIworICAgIyBDT05GSUdfSEVBREVSCisgICAjCistX0FDRU9GCistCistIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBgY29uZnRlc3QuZGVmaW5lcycsIHRoYXQKKy0jIHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8gY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKy1ybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnRhaWwKKy0jIEZpcnN0LCBhcHBlbmQgYSBzcGFjZSB0byBldmVyeSB1bmRlZi9kZWZpbmUgbGluZSwgdG8gZWFzZSBtYXRjaGluZy4KKy1lY2hvICdzLyQvIC8nID5jb25mdGVzdC5kZWZpbmVzCistIyBUaGVuLCBwcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QsIG9yIGluCistIyBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50LCBpbiBjb25maWcuc3RhdHVzLiAgSWYgc29tZSBtYWNyb3Mgd2VyZQorLSMgY2FsbGVkIHNldmVyYWwgdGltZXMgdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbCAjZGVmaW5lcyBmb3IgdGhlIHNhbWUKKy0jIHN5bWJvbCwgd2hpY2ggaXMgdXNlbGVzcy4gIEJ1dCBkbyBub3Qgc29ydCB0aGVtLCBzaW5jZSB0aGUgbGFzdAorLSMgQUNfREVGSU5FIG11c3QgYmUgaG9ub3JlZC4KKy1hY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorLSMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBQQVJBTVMgQyBWQUxVRSBEIiwgd2hlcmUKKy0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkLCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCistIyBQQVJBTVMgaXMgdGhlIHBhcmFtZXRlciBsaXN0IGluIHRoZSBtYWNybyBkZWZpbml0aW9uLS1pbiBtb3N0IGNhc2VzLCBpdCdzCistIyBqdXN0IGFuIGVtcHR5IHN0cmluZy4KKy1hY19kQT0ncyxeXFwoWwkgI10qXFwpW14JIF0qXFwoWwkgXSonCistYWNfZEI9J1xcKVsJIChdLiosXFwxZGVmaW5lXFwyJworLWFjX2RDPScgJworLWFjX2REPScgLCcKKy0KKy11bmlxIGNvbmZkZWZzLmggfAorLSAgc2VkIC1uICcKKy0JdCByc2V0CistCTpyc2V0CistCXMvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLy8KKy0JdCBvaworLQlkCistCTpvaworLQlzL1tcXCYsXS9cXCYvZworLQlzL15cKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvICciJGFjX2RBIidcMSciJGFjX2RCIidcMiciJHthY19kQ30iJ1wzJyIkYWNfZEQiJy9wCistCXMvXlwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS8nIiRhY19kQSInXDEnIiRhY19kQiRhY19kQyInXDInIiRhY19kRCInL3AKKy0gICcgPj5jb25mdGVzdC5kZWZpbmVzCistCistIyBSZW1vdmUgdGhlIHNwYWNlIHRoYXQgd2FzIGFwcGVuZGVkIHRvIGVhc2UgbWF0Y2hpbmcuCistIyBUaGVuIHJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yCistIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorLSMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorLSMgKFRoZSByZWdleHAgY2FuIGJlIHNob3J0LCBzaW5jZSB0aGUgbGluZSBjb250YWlucyBlaXRoZXIgI2RlZmluZSBvciAjdW5kZWYuKQorLWVjaG8gJ3MvICQvLworLXMsXlsJICNdKnUuKiwvKiAmICovLCcgPj5jb25mdGVzdC5kZWZpbmVzCistCistIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzOgorLWFjX21heF9zZWRfbGluZXM9NTAKKy0KKy0jIEZpcnN0IHNlZCBjb21tYW5kIGlzOgkgc2VkIC1mIGRlZmluZXMuc2VkICRhY19maWxlX2lucHV0cyA+IiR0bXAvb3V0MSIKKy0jIFNlY29uZCBvbmUgaXM6CSBzZWQgLWYgZGVmaW5lcy5zZWQgIiR0bXAvb3V0MSIgPiIkdG1wL291dDIiCistIyBUaGlyZCBvbmUgd2lsbCBiZToJIHNlZCAtZiBkZWZpbmVzLnNlZCAiJHRtcC9vdXQyIiA+IiR0bXAvb3V0MSIKKy0jIGV0IGNldGVyYS4KKy1hY19pbj0nJGFjX2ZpbGVfaW5wdXRzJworLWFjX291dD0nIiR0bXAvb3V0MSInCistYWNfbnh0PSciJHRtcC9vdXQyIicKKy0KKy13aGlsZSA6CistZG8KKy0gICMgV3JpdGUgYSBoZXJlIGRvY3VtZW50OgorLSAgICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorLSAgICAjIEZpcnN0LCBjaGVjayB0aGUgZm9ybWF0IG9mIHRoZSBsaW5lOgorLSAgICBjYXQgPiJcJHRtcC9kZWZpbmVzLnNlZCIgPDxcXENFT0YKKy0vXlsJIF0qI1sJIF0qdW5kZWZbCSBdWwkgXSokYWNfd29yZF9yZVsJIF0qXCQvYiBkZWYKKy0vXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qJGFjX3dvcmRfcmVbKAkgXS9iIGRlZgorLWIKKy06ZGVmCistX0FDRU9GCistICBzZWQgJHthY19tYXhfc2VkX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCistICBlY2hvICdDRU9GCistICAgIHNlZCAtZiAiJHRtcC9kZWZpbmVzLnNlZCInICIkYWNfaW4gPiRhY19vdXQiID4+JENPTkZJR19TVEFUVVMKKy0gIGFjX2luPSRhY19vdXQ7IGFjX291dD0kYWNfbnh0OyBhY19ueHQ9JGFjX2luCistICBzZWQgMSwke2FjX21heF9zZWRfbGluZXN9ZCBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC50YWlsCistICBncmVwIC4gY29uZnRlc3QudGFpbCA+L2Rldi9udWxsIHx8IGJyZWFrCistICBybSAtZiBjb25mdGVzdC5kZWZpbmVzCistICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LmRlZmluZXMKKy1kb25lCistcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCistCistZWNobyAiYWNfcmVzdWx0PSRhY19pbiIgPj4kQ09ORklHX1NUQVRVUworLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorLSAgICBlY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgPiIkdG1wL2NvbmZpZy5oIgorLSAgICBjYXQgIiRhY19yZXN1bHQiID4+IiR0bXAvY29uZmlnLmgiCistICAgIGlmIGRpZmYgJGFjX2ZpbGUgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CistZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisrICAgIHsKKysgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKysgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKysgICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKKysgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKysgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgICBlbHNlCistICAgICAgcm0gLWYgJGFjX2ZpbGUKKy0gICAgICBtdiAiJHRtcC9jb25maWcuaCIgJGFjX2ZpbGUKKysgICAgICBybSAtZiAiJGFjX2ZpbGUiCisrICAgICAgbXYgIiRhY190bXAvY29uZmlnLmgiICIkYWNfZmlsZSIgXAorKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICAgZmkKKyAgIGVsc2UKKy0gICAgZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iCistICAgIGNhdCAiJGFjX3Jlc3VsdCIKKysgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisrICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKysgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQorICAgZmkKKy0gIHJtIC1mICIkdG1wL291dDEyIgorLSMgQ29tcHV0ZSAkYWNfZmlsZSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KKy1fYW1fYXJnPSRhY19maWxlCisrIyBDb21wdXRlICIkYWNfZmlsZSIncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCisrX2FtX2FyZz0iJGFjX2ZpbGUiCisgX2FtX3N0YW1wX2NvdW50PTEKKyBmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyAgIGNhc2UgJF9hbV9oZWFkZXIgaW4KK0BAIC0zMzg2Nyw3ICsyMTk2Nyw3IEBAICRhc19leHByIFgiJF9hbV9hcmciIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpW14vXScgXHwgXAorIAkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKyAJIFgiJF9hbV9hcmciIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWCIkX2FtX2FyZyIgfAorKyRhc19lY2hvIFgiJF9hbV9hcmciIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKyAJICAgIHMvL1wxLworIAkgICAgcQorQEAgLTMzODg3LDMwICsyMTk4Nyw0MCBAQCBlY2hvIFgiJF9hbV9hcmciIHwKKyAJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyAgOzsKKyAKKy0gIDpDKSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKy1lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKysgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyAgOzsKKyAgIGVzYWMKKyAKKyAKKyAgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorLSAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IGZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbworLSAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy0gIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCistICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorLSAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorLSAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCistICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworLSAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKy0gICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCistICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKy0gIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKysgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7CisrICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKysgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKysgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisrICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisrICBlc2FjCisrICBzaGlmdAorKyAgZm9yIG1mCisrICBkbworKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgJ01ha2VmaWxlLmluJywgYnV0CisrICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKysgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8CisgJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAorIAkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorLWVjaG8gWCIkbWYiIHwKKyskYXNfZWNobyBYIiRtZiIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworIAkgICAgcy8vXDEvCisgCSAgICBxCitAQCAtMzM5MjgsNjggKzIyMDM4LDMxIEBAIGVjaG8gWCIkbWYiIHwKKyAJICAgIHEKKyAJICB9CisgCSAgcy8uKi8uLzsgcSdgCistICBlbHNlCistICAgIGNvbnRpbnVlCistICBmaQorLSAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKy0gICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKy0gIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCistICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorLSAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCistICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKy0gIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCistICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorLSAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorLSAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorLSAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCistICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorLSAgIyBleHBhbnNpb24uCistICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKy0gICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCistICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworLSAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKy0gICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCistICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKysgICAgZWxzZQorKyAgICAgIGNvbnRpbnVlCisrICAgIGZpCisrICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisrICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nICdtYWtlJy4KKysgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKysgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKysgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisrICAgIHRlc3QgLXogIiRhbV9faW5jbHVkZSIgJiYgY29udGludWUKKysgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKysgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKysgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKysgICAgIyBleHBhbnNpb24uCisrICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZydgOyBkbworKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyAkYXNfZXhwciBYIiRmaWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorIAkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisgCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKy1lY2hvIFgiJGZpbGUiIHwKKy0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKy0JICAgIHMvL1wxLworLQkgICAgcQorLQkgIH0KKy0JICAvXlhcKFwvXC9cKVteL10uKi97CistCSAgICBzLy9cMS8KKy0JICAgIHEKKy0JICB9CistCSAgL15YXChcL1wvXCkkL3sKKy0JICAgIHMvL1wxLworLQkgICAgcQorLQkgIH0KKy0JICAvXlhcKFwvXCkuKi97CistCSAgICBzLy9cMS8KKy0JICAgIHEKKy0JICB9CistCSAgcy8uKi8uLzsgcSdgCistICAgIHsgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyCistICBjYXNlICRhc19kaXIgaW4gIygKKy0gIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKy0gIGVzYWMKKy0gIHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgJGFzX21rZGlyX3AgJiYgbWtkaXIgLXAgIiRhc19kaXIiOyB9IHx8IHsKKy0gICAgYXNfZGlycz0KKy0gICAgd2hpbGUgOjsgZG8KKy0gICAgICBjYXNlICRhc19kaXIgaW4gIygKKy0gICAgICAqXCcqKSBhc19xZGlyPWBlY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMoCistICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKy0gICAgICBlc2FjCistICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKy0gICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CistZWNobyBYIiRhc19kaXIiIHwKKyskYXNfZWNobyBYIiRmaWxlIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisgCSAgICBzLy9cMS8KKyAJICAgIHEKK0BAIC0zNDAwNywxNiArMjIwODAsMTIgQEAgZWNobyBYIiRhc19kaXIiIHwKKyAJICAgIHEKKyAJICB9CisgCSAgcy8uKi8uLzsgcSdgCistICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKysgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKysgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgICBkb25lCistICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKy0gIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CistZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKy0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKy0gICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKy0gICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICBkb25lCistZG9uZQorK30KKyAgOzsKKyAgICAgImxpYnRvb2wiOkMpCisgCitAQCAtMzQwMzksNyArMjIxMDgsOCBAQCBkb25lCisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKysjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTM0MDg3LDYgKzIyMTU3LDE1IEBAIHBpY19tb2RlPSRwaWNfbW9kZQorICMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorIGZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorIAorKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KKytTSEVMTD0kbHRfU0hFTEwKKysKKysjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgorK0VDSE89JGx0X0VDSE8KKysKKysjIFRoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KKytQQVRIX1NFUEFSQVRPUj0kbHRfUEFUSF9TRVBBUkFUT1IKKysKKyAjIFRoZSBob3N0IHN5c3RlbS4KKyBob3N0X2FsaWFzPSRob3N0X2FsaWFzCisgaG9zdD0kaG9zdAorQEAgLTM0MTM2LDIwICsyMjIxNSw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCistIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisrIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKytPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMzQxNTgsNiArMjIyNTksOSBAQCBSQU5MSUI9JGx0X1JBTkxJQgorIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKyAKKysjIFdoZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbi4KKytsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbgorKworICMgQSBDIGNvbXBpbGVyLgorIExUQ0M9JGx0X0NDCisgCitAQCAtMzQxNzYsMTQgKzIyMjgwLDE0IEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKy0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKy1vYmpkaXI9JG9iamRpcgorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworIAorLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KKy1TSEVMTD0kbHRfU0hFTEwKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKyAKKy0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KKy1FQ0hPPSRsdF9FQ0hPCisrIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisrb2JqZGlyPSRvYmpkaXIKKyAKKyAjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCisgTUFHSUNfQ01EPSRNQUdJQ19DTUQKK0BAIC0zNDE5MSw2ICsyMjI5NSw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMzQyNDcsNiArMjIzNTQsOSBAQCBsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworICMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCisgc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisgCisrIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgorK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisrCisgIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KKyBwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisgCitAQCAtMzQyODMsMTggKzIyMzkzLDE2IEBAIG9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCisgc3RyaXBsaWI9JGx0X3N0cmlwbGliCisgCisgIyBBc3NlbWJsZXIgcHJvZ3JhbS4KKy1BUz0kQVMKKy0KKy0jIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorLURMTFRPT0w9JERMTFRPT0wKKy0KKy0jIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KKy1PQkpEVU1QPSRPQkpEVU1QCisrQVM9JGx0X0FTCisgCisgCisgIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorIExEPSRsdF9MRAorIAorKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KKytyZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKKytyZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKysKKyAjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCisgb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworIAorQEAgLTM0MzA3LDEyICsyMjQxNSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0zNDM2MiwxMCArMjI0NzAsNiBAQCBub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKyAjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisgCistIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5CistIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCistaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAorLQorICMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCisgCitAQCAtMzQzOTksOSArMjI1MDMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0zNDQxNyw2ICsyMjUxOCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMzQ0NjMsMjEyICsyMjU2NywxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKy0gICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKy0gICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitAQCAtMzQ2ODAsNiArMjI3NDEsMTAgQEAgX0xUX0VPRgorICMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KKyBMRD0kbHRfTERfQ1hYCisgCisrIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZ19DWFgKKytyZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHNfQ1hYCisrCisgIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorIG9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfQ1hYCisgCitAQCAtMzQ2OTIsMTIgKzIyNzU3LDEyIEBAIHdpdGhfZ2NjPSRHQ0NfQ1hYCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorIAorQEAgLTM0NzQ3LDEwICsyMjgxMiw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKKyAjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWAorIAorLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeQorLSMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgorLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCistCisgIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCisgCitAQCAtMzQ3ODQsOSArMjI4NDUsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGhfQ1hYCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisgCitAQCAtMzQ4MDIsNiArMjI4NjAsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAorIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzX0NYWAorKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKKyAKK0BAIC0zNDgzMSwxMSArMjI4OTIsMTMgQEAgX0xUX0VPRgorIGRvbmUgIyBmb3IgYWNfdGFnCisgCisgCisteyAoZXhpdCAwKTsgZXhpdCAwOyB9CisrYXNfZm5fZXhpdCAwCisgX0FDRU9GCistY2htb2QgK3ggJENPTkZJR19TVEFUVVMKKyBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorIAorK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisrICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKysKKyAKKyAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisgIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCitAQCAtMzQ4NTUsMTEgKzIyOTE4LDE1IEBAIGlmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICAgZXhlYyA1Pj5jb25maWcubG9nCisgICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCistICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorK2ZpCisraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KKyBmaQorIAorIAorLXsgZWNobyAiJGFzX21lOiRMSU5FTk86CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OgorIAorICAgQ29uZmlndXJhdGlvbiBTdW1tYXJ5CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BAIC0zNDg5MCw3ICsyMjk1Nyw3IEBAIGZpCisgICBMaW5rIGxpYnJhcmllcyAgICAgICAgICAgICAgOiAke0xJQlN9CisgCisgIiA+JjUKKy1lY2hvICIkYXNfbWU6CisrJGFzX2VjaG8gIiRhc19tZToKKyAKKyAgIENvbmZpZ3VyYXRpb24gU3VtbWFyeQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluIGIvZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluCitpbmRleCBlNmRjMTM0Li4zZTVhMmM4IDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9BbGxvY2F0b3IvTWFrZWZpbGUuaW4KK0BAIC0xLDggKzEsOCBAQAorLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAuMSBmcm9tIE1ha2VmaWxlLmFtLgorKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTQuMSBmcm9tIE1ha2VmaWxlLmFtLgorICMgQGNvbmZpZ3VyZV9pbnB1dEAKKyAKKy0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKy0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisgIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitAQCAtMTQsOSArMTQsNTUgQEAKKyAKKyBAU0VUX01BS0VACisgVlBBVEggPSBAc3JjZGlyQAorK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKKythbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorKyAgICAgID8pIDs7IFwKKysgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKysgICAgICAgICBleGl0IDE7OyBcCisrICBlc2FjOyBcCisrICBoYXNfb3B0PW5vOyBcCisrICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKysgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKysgIGVsc2UgXAorKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKysgICAgICAqXFxbXCBcCV0qKSBcCisrICAgICAgICBicz1cXDsgXAorKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisrICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAorKyAgICBlc2FjOyBcCisrICBmaTsgXAorKyAgc2tpcF9uZXh0PW5vOyBcCisrICBzdHJpcF90cmFpbG9wdCAoKSBcCisrICB7IFwKKysgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKysgIH07IFwKKysgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKysgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisrICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKysgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICBlc2FjOyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisrICAgIGVzYWM7IFwKKysgIGRvbmU7IFwKKysgIHRlc3QgJCRoYXNfb3B0ID0geWVzCisrYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKythbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKyBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisrcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACisgYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CisgaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworQEAgLTMzLDM4ICs3OSw5MiBAQCBidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAorIGhvc3RfdHJpcGxldCA9IEBob3N0QAorIEBDRl9CVUlMRF9URVNUU19UUlVFQGNoZWNrX1BST0dSQU1TID0gQWxsb2NhdG9yRXhhbXBsZSQoRVhFRVhUKQorIHN1YmRpciA9IGV4YW1wbGVzL0FsbG9jYXRvcgorLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisgYW1fQWxsb2NhdG9yRXhhbXBsZV9PQkpFQ1RTID0gQWxsb2NhdG9yRXhhbXBsZS4kKE9CSkVYVCkKKyBBbGxvY2F0b3JFeGFtcGxlX09CSkVDVFMgPSAkKGFtX0FsbG9jYXRvckV4YW1wbGVfT0JKRUNUUykKKyBBbGxvY2F0b3JFeGFtcGxlX0RFUEVOREVOQ0lFUyA9ICR7dG9wX2J1aWxkZGlyfS9saWJDb3JlRm91bmRhdGlvbi5sYQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKyAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKysJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKKythbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CisrYW1fX3ZfQ0NfMSA9IAorIENDTEQgPSAkKENDKQorLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCistCSQoTERGTEFHUykgLW8gJEAKKytMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKKythbV9fdl9DQ0xEXzEgPSAKKyBTT1VSQ0VTID0gJChBbGxvY2F0b3JFeGFtcGxlX1NPVVJDRVMpCisgRElTVF9TT1VSQ0VTID0gJChBbGxvY2F0b3JFeGFtcGxlX1NPVVJDRVMpCisrYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisrICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKysgICAgbnxub3xOTykgZmFsc2U7OyBcCisrICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisrICBlc2FjCisrYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKysjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisrIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCisrIyAqbm90KiBwcmVzZXJ2ZWQuCisrYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisrICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCisrICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisrJworKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKysjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKysjIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgorK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisrICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKyAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisrICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAorIEVUQUdTID0gZXRhZ3MKKyBDVEFHUyA9IGN0YWdzCisgRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKyBBQ0xPQ0FMID0gQEFDTE9DQUxACisgQUxMT0NBID0gQEFMTE9DQUAKKyBBTVRBUiA9IEBBTVRBUkAKKytBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKKyBBUiA9IEBBUkAKKyBBUyA9IEBBU0AKKyBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0BAIC0xMTQsNiArMjE0LDcgQEAgTE5fUyA9IEBMTl9TQAorIExUTElCT0JKUyA9IEBMVExJQk9CSlNACisgTUFJTlQgPSBATUFJTlRACisgTUFLRUlORk8gPSBATUFLRUlORk9ACisrTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorIE1LRElSX1AgPSBATUtESVJfUEAKKyBOTSA9IEBOTUAKKyBOTUVESVQgPSBATk1FRElUQAorQEAgLTEyNiw2ICsyMjcsNyBAQCBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKyBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorIFBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorIFBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACisrUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyBQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKKyBQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitAQCAtMTQ2LDYgKzI0OCw3IEBAIGFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACisgYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorIGFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKKyBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKKythY19jdF9BUiA9IEBhY19jdF9BUkAKKyBhY19jdF9DQyA9IEBhY19jdF9DQ0AKKyBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK0BAIC0xODAsNyArMjgzLDYgQEAgbGliZGlyID0gQGxpYmRpckAKKyBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKKyBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACistbHRfRUNITyA9IEBsdF9FQ0hPQAorIG1hbmRpciA9IEBtYW5kaXJACisgbWtkaXJfcCA9IEBta2Rpcl9wQAorIG9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK0BAIC0xOTMsNiArMjk1LDcgQEAgc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACisgc3JjZGlyID0gQHNyY2RpckAKKyBzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACisgdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKyt0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACisgdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKKyB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisgQU1fQ0ZMQUdTID0gLUkke3RvcF9zcmNkaXJ9L2luY2x1ZGUKK0BAIC0yMDcsMTQgKzMxMCwxNCBAQCAkKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorLQkJJiYgZXhpdCAwOyBcCisrCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisgCSAgICAgIGV4aXQgMTs7IFwKKyAJICBlc2FjOyBcCisgCWRvbmU7IFwKKy0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9BbGxvY2F0b3IvTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9BbGxvY2F0b3IvTWFrZWZpbGUnOyBcCisrCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKysJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtMjMyLDE2ICszMzUsMjAgQEAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorIAorIGNsZWFuLWNoZWNrUFJPR1JBTVM6CistCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorLQkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKy0JICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKy0JICBybSAtZiAkJHAgJCRmIDsgXAorLQlkb25lCistQWxsb2NhdG9yRXhhbXBsZSQoRVhFRVhUKTogJChBbGxvY2F0b3JFeGFtcGxlX09CSkVDVFMpICQoQWxsb2NhdG9yRXhhbXBsZV9ERVBFTkRFTkNJRVMpIAorKwlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKysJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKysJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorKwlybSAtZiAkJGxpc3QKKysKKytBbGxvY2F0b3JFeGFtcGxlJChFWEVFWFQpOiAkKEFsbG9jYXRvckV4YW1wbGVfT0JKRUNUUykgJChBbGxvY2F0b3JFeGFtcGxlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9BbGxvY2F0b3JFeGFtcGxlX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBBbGxvY2F0b3JFeGFtcGxlJChFWEVFWFQpCistCSQoTElOSykgJChBbGxvY2F0b3JFeGFtcGxlX09CSkVDVFMpICQoQWxsb2NhdG9yRXhhbXBsZV9MREFERCkgJChMSUJTKQorKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoQWxsb2NhdG9yRXhhbXBsZV9PQkpFQ1RTKSAkKEFsbG9jYXRvckV4YW1wbGVfTERBREQpICQoTElCUykKKyAKKyBtb3N0bHljbGVhbi1jb21waWxlOgorIAktcm0gLWYgKi4kKE9CSkVYVCkKK0BAIC0yNTIsMjUgKzM1OSwyNSBAQCBkaXN0Y2xlYW4tY29tcGlsZToKKyBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvQWxsb2NhdG9yRXhhbXBsZS5Qb0BhbV9fcXVvdGVACisgCisgLmMubzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIC5jLm9iajoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisgCisgLmMubG86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyBtb3N0bHljbGVhbi1saWJ0b29sOgorIAktcm0gLWYgKi5sbworQEAgLTI3OCw0OSArMzg1LDU0IEBAIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgY2xlYW4tbGlidG9vbDoKKyAJLXJtIC1yZiAubGlicyBfbGlicworIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKytJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKKyt0YWdzOiB0YWdzLWFtCisrVEFHUzogdGFncworKworK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJc2V0IHg7IFwKKyAJaGVyZT1gcHdkYDsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwlzaGlmdDsgXAorKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKy0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCistCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKysJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICQkdW5pcXVlOyBcCisrCSAgZmk7IFwKKyAJZmkKKy1jdGFnczogQ1RBR1MKKy1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKytjdGFnczogY3RhZ3MtYW0KKysKKytDVEFHUzogY3RhZ3MKKytjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKy0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKysJICAgICAkJHVuaXF1ZQorIAorIEdUQUdTOgorIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAorLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisrCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKytjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisrCisrY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKwljYXNlICIkKHNyY2RpcikiIGluIFwKKysJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisrCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKysJZXNhYzsgXAorKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKysJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisrCSAgZWxzZSBcCisrCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorKwkgIGZpOyBcCisrCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworIAorIGRpc3RjbGVhbi10YWdzOgorIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworQEAgLTM0MSwxMyArNDUzLDE3IEBAIGRpc3RkaXI6ICQoRElTVEZJTEVTKQorIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKyAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorIAkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKysJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorKwkgICAgZmk7IFwKKyAJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisgCSAgICBmaTsgXAorLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorIAkgIGVsc2UgXAorLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCistCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKysJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisrCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorIAkgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKKyAJZG9uZQorQEAgLTM2NiwxNiArNDgyLDIyIEBAIGluc3RhbGwtYW06IGFsbC1hbQorIAorIGluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCisgaW5zdGFsbC1zdHJpcDoKKy0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKy0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKy0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisrCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgICBpbnN0YWxsOyBcCisrCWVsc2UgXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisrCWZpCisgbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyAKKyBjbGVhbi1nZW5lcmljOgorIAorIGRpc3RjbGVhbi1nZW5lcmljOgorIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisgCisgbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCitAQCAtMzk3LDYgKzUxOSw4IEBAIGR2aS1hbToKKyAKKyBodG1sOiBodG1sLWFtCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLWFtCisgCisgaW5mby1hbToKK0BAIC00MDUsMTggKzUyOSwyOCBAQCBpbnN0YWxsLWRhdGEtYW06CisgCisgaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisgCisraW5zdGFsbC1kdmktYW06CisrCisgaW5zdGFsbC1leGVjLWFtOgorIAorIGluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisgCisraW5zdGFsbC1odG1sLWFtOgorKworIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCisraW5zdGFsbC1pbmZvLWFtOgorKworIGluc3RhbGwtbWFuOgorIAorIGluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorIAorK2luc3RhbGwtcGRmLWFtOgorKworIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKyAKKytpbnN0YWxsLXBzLWFtOgorKworIGluc3RhbGxjaGVjay1hbToKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCitAQCAtNDM5LDExICs1NzMsMTEgQEAgcHMtYW06CisgCisgdW5pbnN0YWxsLWFtOgorIAorLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKysuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisgCistLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKy0JY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgXAorLQlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorKy5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKysJY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBcCisrCWN0YWdzIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisgCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKyAJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisgCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorQEAgLTQ1Myw3ICs1ODcsNyBAQCB1bmluc3RhbGwtYW06CisgCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKyAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorIAltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCistCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorKwl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorIAorIAorIEBDRl9CVUlMRF9URVNUU19UUlVFQGNoZWNrOgorQEAgLTQ2NCw2ICs1OTgsNyBAQCB1bmluc3RhbGwtYW06CisgCisgQENGX0JVSUxEX1RFU1RTX1RSVUVAdmFsZ3JpbmQ6CisgQENGX0JVSUxEX1RFU1RTX1RSVUVACSR7TElCVE9PTH0gLS1tb2RlIGV4ZWN1dGUgJHtAfSAke1ZBTEdSSU5ERkxBR1N9IC4vQWxsb2NhdG9yRXhhbXBsZQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NGTG9jYWxTZXJ2ZXIvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9DRkxvY2FsU2VydmVyL01ha2VmaWxlLmluCitpbmRleCBiODQ2ZDIxLi41NjBiMzkxIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvQ0ZMb2NhbFNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvQ0ZMb2NhbFNlcnZlci9NYWtlZmlsZS5pbgorQEAgLTEsOCArMSw4IEBACistIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMC4xIGZyb20gTWFrZWZpbGUuYW0uCisrIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNC4xIGZyb20gTWFrZWZpbGUuYW0uCisgIyBAY29uZmlndXJlX2lucHV0QAorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorLSMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKyAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK0BAIC0xNSw5ICsxNSw1NSBAQAorIEBTRVRfTUFLRUAKKyAKKyBWUEFUSCA9IEBzcmNkaXJACisrYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisrICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisrICAgICAgPykgOzsgXAorKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisrICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorKyAgICAgICAgIGV4aXQgMTs7IFwKKysgIGVzYWM7IFwKKysgIGhhc19vcHQ9bm87IFwKKysgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisrICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorKyAgZWxzZSBcCisrICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorKyAgICAgICpcXFtcIFwJXSopIFwKKysgICAgICAgIGJzPVxcOyBcCisrICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKysgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisrICAgIGVzYWM7IFwKKysgIGZpOyBcCisrICBza2lwX25leHQ9bm87IFwKKysgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKysgIHsgXAorKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorKyAgfTsgXAorKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisrICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKysgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisrICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgIGVzYWM7IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKysgICAgZXNhYzsgXAorKyAgZG9uZTsgXAorKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKKythbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACistcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKKyBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCisgaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKKyBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitAQCAtMzQsMTkgKzgwLDI3IEBAIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2tfUFJPR1JBTVMgPSBDbGllbnQkKEVYRUVYVCkgU2VydmVyJChFWEVFWFQpCisgc3ViZGlyID0gZXhhbXBsZXMvQ0ZMb2NhbFNlcnZlcgorLURJU1RfQ09NTU9OID0gUkVBRE1FICQobm9pbnN0X0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCistCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wICQobm9pbnN0X0hFQURFUlMpIFJFQURNRQorIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKKyBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hY2luY2x1ZGUubTQgXAorLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorKwkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAorKwkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisgYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKyAJJChBQ0xPQ0FMX000KQorIG1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzCisgQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2NvbmZpZy5oCisgQ09ORklHX0NMRUFOX0ZJTEVTID0KKytDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorIGxpYkNvbW1vbl9sYV9MSUJBREQgPQorIGFtX2xpYkNvbW1vbl9sYV9PQkpFQ1RTID0gQ29tbW9uLmxvCisgbGliQ29tbW9uX2xhX09CSkVDVFMgPSAkKGFtX2xpYkNvbW1vbl9sYV9PQkpFQ1RTKQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBhbV9saWJDb21tb25fbGFfcnBhdGggPQorIGFtX0NsaWVudF9PQkpFQ1RTID0gQ2xpZW50LiQoT0JKRVhUKQorIENsaWVudF9PQkpFQ1RTID0gJChhbV9DbGllbnRfT0JKRUNUUykKK0BAIC01NiwyOCArMTEwLDczIEBAIGFtX1NlcnZlcl9PQkpFQ1RTID0gU2VydmVyLiQoT0JKRVhUKQorIFNlcnZlcl9PQkpFQ1RTID0gJChhbV9TZXJ2ZXJfT0JKRUNUUykKKyBTZXJ2ZXJfREVQRU5ERU5DSUVTID0gJHt0b3BfYnVpbGRkaXJ9L2xpYkNvcmVGb3VuZGF0aW9uLmxhIFwKKyAJbGliQ29tbW9uLmxhCisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlCisgZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworK2FtX19tdiA9IG12IC1mCisgQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisgCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKy1MVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCisrTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKysJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisrCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCisrYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworK2FtX192X0NDXzEgPSAKKyBDQ0xEID0gJChDQykKKy1MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKy0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorLQkkKExERkxBR1MpIC1vICRACisrTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKysJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisrQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKKythbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CisrYW1fX3ZfQ0NMRF8xID0gCisgU09VUkNFUyA9ICQobGliQ29tbW9uX2xhX1NPVVJDRVMpICQoQ2xpZW50X1NPVVJDRVMpICQoU2VydmVyX1NPVVJDRVMpCisgRElTVF9TT1VSQ0VTID0gJChsaWJDb21tb25fbGFfU09VUkNFUykgJChDbGllbnRfU09VUkNFUykgXAorIAkkKFNlcnZlcl9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworIEhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQorK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTI3LDYgKzIyNiw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMzksNiArMjM5LDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE1OSw2ICsyNjAsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTkzLDcgKzI5NSw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMjA2LDYgKzMwNyw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIEFNX0NGTEFHUyA9IC1JJHt0b3Bfc3JjZGlyfS9pbmNsdWRlCitAQCAtMjI0LDE0ICszMjYsMTQgQEAgJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmkKKyAJQGZvciBkZXAgaW4gJD87IGRvIFwKKyAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKyAJICAgICokJGRlcCopIFwKKy0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKy0JCSYmIGV4aXQgMDsgXAorKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKysJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorIAkgICAgICBleGl0IDE7OyBcCisgCSAgZXNhYzsgXAorIAlkb25lOyBcCistCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXhhbXBsZXMvQ0ZMb2NhbFNlcnZlci9NYWtlZmlsZSc7IFwKKy0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCistCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9DRkxvY2FsU2VydmVyL01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9DRkxvY2FsU2VydmVyL01ha2VmaWxlJzsgXAorKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisrCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL0NGTG9jYWxTZXJ2ZXIvTWFrZWZpbGUKKyAuUFJFQ0lPVVM6IE1ha2VmaWxlCisgTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAlAY2FzZSAnJD8nIGluIFwKK0BAIC0yNDksMzAgKzM1MSwzOCBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisgCisgY2xlYW4tY2hlY2tMVExJQlJBUklFUzoKKyAJLXRlc3QgLXogIiQoY2hlY2tfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGNoZWNrX0xUTElCUkFSSUVTKQorLQlAbGlzdD0nJChjaGVja19MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKy0JICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCistCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCistCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorLQkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKy0JZG9uZQorLWxpYkNvbW1vbi5sYTogJChsaWJDb21tb25fbGFfT0JKRUNUUykgJChsaWJDb21tb25fbGFfREVQRU5ERU5DSUVTKSAKKy0JJChMSU5LKSAkKGFtX2xpYkNvbW1vbl9sYV9ycGF0aCkgJChsaWJDb21tb25fbGFfT0JKRUNUUykgJChsaWJDb21tb25fbGFfTElCQUREKSAkKExJQlMpCisrCUBsaXN0PSckKGNoZWNrX0xUTElCUkFSSUVTKSc7IFwKKysJbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKKysJICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAorKwkgICAgICBzb3J0IC11YDsgXAorKwl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAorKwkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKKysJICBybSAtZiAkJHtsb2NzfTsgXAorKwl9CisrCisrbGliQ29tbW9uLmxhOiAkKGxpYkNvbW1vbl9sYV9PQkpFQ1RTKSAkKGxpYkNvbW1vbl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliQ29tbW9uX2xhX0RFUEVOREVOQ0lFUykgCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgJChhbV9saWJDb21tb25fbGFfcnBhdGgpICQobGliQ29tbW9uX2xhX09CSkVDVFMpICQobGliQ29tbW9uX2xhX0xJQkFERCkgJChMSUJTKQorIAorIGNsZWFuLWNoZWNrUFJPR1JBTVM6CistCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorLQkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKy0JICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKy0JICBybSAtZiAkJHAgJCRmIDsgXAorLQlkb25lCistQ2xpZW50JChFWEVFWFQpOiAkKENsaWVudF9PQkpFQ1RTKSAkKENsaWVudF9ERVBFTkRFTkNJRVMpIAorKwlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKysJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKysJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorKwlybSAtZiAkJGxpc3QKKysKKytDbGllbnQkKEVYRUVYVCk6ICQoQ2xpZW50X09CSkVDVFMpICQoQ2xpZW50X0RFUEVOREVOQ0lFUykgJChFWFRSQV9DbGllbnRfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIENsaWVudCQoRVhFRVhUKQorLQkkKExJTkspICQoQ2xpZW50X09CSkVDVFMpICQoQ2xpZW50X0xEQUREKSAkKExJQlMpCistU2VydmVyJChFWEVFWFQpOiAkKFNlcnZlcl9PQkpFQ1RTKSAkKFNlcnZlcl9ERVBFTkRFTkNJRVMpIAorKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoQ2xpZW50X09CSkVDVFMpICQoQ2xpZW50X0xEQUREKSAkKExJQlMpCisrCisrU2VydmVyJChFWEVFWFQpOiAkKFNlcnZlcl9PQkpFQ1RTKSAkKFNlcnZlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfU2VydmVyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBTZXJ2ZXIkKEVYRUVYVCkKKy0JJChMSU5LKSAkKFNlcnZlcl9PQkpFQ1RTKSAkKFNlcnZlcl9MREFERCkgJChMSUJTKQorKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoU2VydmVyX09CSkVDVFMpICQoU2VydmVyX0xEQUREKSAkKExJQlMpCisgCisgbW9zdGx5Y2xlYW4tY29tcGlsZToKKyAJLXJtIC1mICouJChPQkpFWFQpCitAQCAtMjg1LDI1ICszOTUsMjUgQEAgZGlzdGNsZWFuLWNvbXBpbGU6CisgQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL1NlcnZlci5Qb0BhbV9fcXVvdGVACisgCisgLmMubzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIC5jLm9iajoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisgCisgLmMubG86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyBtb3N0bHljbGVhbi1saWJ0b29sOgorIAktcm0gLWYgKi5sbworQEAgLTMxMSw0OSArNDIxLDU0IEBAIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgY2xlYW4tbGlidG9vbDoKKyAJLXJtIC1yZiAubGlicyBfbGlicworIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKytJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKKyt0YWdzOiB0YWdzLWFtCisrVEFHUzogdGFncworKworK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJc2V0IHg7IFwKKyAJaGVyZT1gcHdkYDsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwlzaGlmdDsgXAorKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKy0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCistCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKysJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICQkdW5pcXVlOyBcCisrCSAgZmk7IFwKKyAJZmkKKy1jdGFnczogQ1RBR1MKKy1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKytjdGFnczogY3RhZ3MtYW0KKysKKytDVEFHUzogY3RhZ3MKKytjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKy0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKysJICAgICAkJHVuaXF1ZQorIAorIEdUQUdTOgorIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAorLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisrCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKytjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisrCisrY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKwljYXNlICIkKHNyY2RpcikiIGluIFwKKysJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisrCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKysJZXNhYzsgXAorKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKysJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisrCSAgZWxzZSBcCisrCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorKwkgIGZpOyBcCisrCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworIAorIGRpc3RjbGVhbi10YWdzOgorIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworQEAgLTM3NCwxMyArNDg5LDE3IEBAIGRpc3RkaXI6ICQoRElTVEZJTEVTKQorIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKyAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorIAkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKysJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorKwkgICAgZmk7IFwKKyAJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisgCSAgICBmaTsgXAorLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorIAkgIGVsc2UgXAorLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCistCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKysJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisrCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorIAkgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKKyAJZG9uZQorQEAgLTM5OSwxNiArNTE4LDIyIEBAIGluc3RhbGwtYW06IGFsbC1hbQorIAorIGluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCisgaW5zdGFsbC1zdHJpcDoKKy0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKy0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKy0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisrCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgICBpbnN0YWxsOyBcCisrCWVsc2UgXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisrCWZpCisgbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyAKKyBjbGVhbi1nZW5lcmljOgorIAorIGRpc3RjbGVhbi1nZW5lcmljOgorIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisgCisgbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCitAQCAtNDMwLDYgKzU1NSw4IEBAIGR2aS1hbToKKyAKKyBodG1sOiBodG1sLWFtCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLWFtCisgCisgaW5mby1hbToKK0BAIC00MzgsMTggKzU2NSwyOCBAQCBpbnN0YWxsLWRhdGEtYW06CisgCisgaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisgCisraW5zdGFsbC1kdmktYW06CisrCisgaW5zdGFsbC1leGVjLWFtOgorIAorIGluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisgCisraW5zdGFsbC1odG1sLWFtOgorKworIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCisraW5zdGFsbC1pbmZvLWFtOgorKworIGluc3RhbGwtbWFuOgorIAorIGluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorIAorK2luc3RhbGwtcGRmLWFtOgorKworIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKyAKKytpbnN0YWxsLXBzLWFtOgorKworIGluc3RhbGxjaGVjay1hbToKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCitAQCAtNDcyLDIxICs2MDksMjIgQEAgcHMtYW06CisgCisgdW5pbnN0YWxsLWFtOgorIAorLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKysuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisgCistLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKysuUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCisgCWNsZWFuLWNoZWNrTFRMSUJSQVJJRVMgY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIFwKKy0JY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCistCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCistCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorLQlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKy0JaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCistCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAorKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisrCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKysJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisrCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKysJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKysJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKysJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisrCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysKKyAKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NGTWVzc2FnZVBvcnQvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9DRk1lc3NhZ2VQb3J0L01ha2VmaWxlLmluCitpbmRleCA4ZmU5NDliLi44NDQ5Nzg4IDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvQ0ZNZXNzYWdlUG9ydC9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvQ0ZNZXNzYWdlUG9ydC9NYWtlZmlsZS5pbgorQEAgLTEsOCArMSw4IEBACistIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMC4xIGZyb20gTWFrZWZpbGUuYW0uCisrIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNC4xIGZyb20gTWFrZWZpbGUuYW0uCisgIyBAY29uZmlndXJlX2lucHV0QAorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorLSMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKyAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK0BAIC0xNCw5ICsxNCw1NSBAQAorIAorIEBTRVRfTUFLRUAKKyBWUEFUSCA9IEBzcmNkaXJACisrYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisrICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisrICAgICAgPykgOzsgXAorKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisrICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorKyAgICAgICAgIGV4aXQgMTs7IFwKKysgIGVzYWM7IFwKKysgIGhhc19vcHQ9bm87IFwKKysgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisrICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorKyAgZWxzZSBcCisrICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorKyAgICAgICpcXFtcIFwJXSopIFwKKysgICAgICAgIGJzPVxcOyBcCisrICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKysgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisrICAgIGVzYWM7IFwKKysgIGZpOyBcCisrICBza2lwX25leHQ9bm87IFwKKysgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKysgIHsgXAorKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorKyAgfTsgXAorKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisrICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKysgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisrICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgIGVzYWM7IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKysgICAgZXNhYzsgXAorKyAgZG9uZTsgXAorKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKKythbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACistcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKKyBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCisgaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKKyBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitAQCAtMzMsNDEgKzc5LDk1IEBAIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgQENGX0JVSUxEX1RFU1RTX1RSVUVARVhUUkFfUFJPR1JBTVMgPSBjbGllbnQkKEVYRUVYVCkgc2VydmVyJChFWEVFWFQpCisgc3ViZGlyID0gZXhhbXBsZXMvQ0ZNZXNzYWdlUG9ydAorLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisgYW1fY2xpZW50X09CSkVDVFMgPSBjbGllbnQuJChPQkpFWFQpCisgY2xpZW50X09CSkVDVFMgPSAkKGFtX2NsaWVudF9PQkpFQ1RTKQorIGNsaWVudF9ERVBFTkRFTkNJRVMgPSAke3RvcF9idWlsZGRpcn0vbGliQ29yZUZvdW5kYXRpb24ubGEKKytBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCisrYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9sdF8wID0gLS1zaWxlbnQKKythbV9fdl9sdF8xID0gCisgYW1fc2VydmVyX09CSkVDVFMgPSBzZXJ2ZXIuJChPQkpFWFQpCisgc2VydmVyX09CSkVDVFMgPSAkKGFtX3NlcnZlcl9PQkpFQ1RTKQorIHNlcnZlcl9ERVBFTkRFTkNJRVMgPSAke3RvcF9idWlsZGRpcn0vbGliQ29yZUZvdW5kYXRpb24ubGEKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKyAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKysJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKKythbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CisrYW1fX3ZfQ0NfMSA9IAorIENDTEQgPSAkKENDKQorLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCistCSQoTERGTEFHUykgLW8gJEAKKytMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKKythbV9fdl9DQ0xEXzEgPSAKKyBTT1VSQ0VTID0gJChjbGllbnRfU09VUkNFUykgJChzZXJ2ZXJfU09VUkNFUykKKyBESVNUX1NPVVJDRVMgPSAkKGNsaWVudF9TT1VSQ0VTKSAkKHNlcnZlcl9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTE3LDYgKzIxNyw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMjksNiArMjMwLDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE0OSw2ICsyNTEsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTgzLDcgKzI4Niw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMTk2LDYgKzI5OCw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIEFNX0NGTEFHUyA9IC1JJHt0b3Bfc3JjZGlyfS9pbmNsdWRlCitAQCAtMjExLDE0ICszMTQsMTQgQEAgJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmkKKyAJQGZvciBkZXAgaW4gJD87IGRvIFwKKyAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKyAJICAgICokJGRlcCopIFwKKy0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKy0JCSYmIGV4aXQgMDsgXAorKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKysJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorIAkgICAgICBleGl0IDE7OyBcCisgCSAgZXNhYzsgXAorIAlkb25lOyBcCistCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXhhbXBsZXMvQ0ZNZXNzYWdlUG9ydC9NYWtlZmlsZSc7IFwKKy0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCistCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9DRk1lc3NhZ2VQb3J0L01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9DRk1lc3NhZ2VQb3J0L01ha2VmaWxlJzsgXAorKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisrCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL0NGTWVzc2FnZVBvcnQvTWFrZWZpbGUKKyAuUFJFQ0lPVVM6IE1ha2VmaWxlCisgTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAlAY2FzZSAnJD8nIGluIFwKK0BAIC0yMzYsMTIgKzMzOSwxNSBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorLWNsaWVudCQoRVhFRVhUKTogJChjbGllbnRfT0JKRUNUUykgJChjbGllbnRfREVQRU5ERU5DSUVTKSAKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorKworK2NsaWVudCQoRVhFRVhUKTogJChjbGllbnRfT0JKRUNUUykgJChjbGllbnRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NsaWVudF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgY2xpZW50JChFWEVFWFQpCistCSQoTElOSykgJChjbGllbnRfT0JKRUNUUykgJChjbGllbnRfTERBREQpICQoTElCUykKKy1zZXJ2ZXIkKEVYRUVYVCk6ICQoc2VydmVyX09CSkVDVFMpICQoc2VydmVyX0RFUEVOREVOQ0lFUykgCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgJChjbGllbnRfT0JKRUNUUykgJChjbGllbnRfTERBREQpICQoTElCUykKKysKKytzZXJ2ZXIkKEVYRUVYVCk6ICQoc2VydmVyX09CSkVDVFMpICQoc2VydmVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9zZXJ2ZXJfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIHNlcnZlciQoRVhFRVhUKQorLQkkKExJTkspICQoc2VydmVyX09CSkVDVFMpICQoc2VydmVyX0xEQUREKSAkKExJQlMpCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgJChzZXJ2ZXJfT0JKRUNUUykgJChzZXJ2ZXJfTERBREQpICQoTElCUykKKyAKKyBtb3N0bHljbGVhbi1jb21waWxlOgorIAktcm0gLWYgKi4kKE9CSkVYVCkKK0BAIC0yNTMsMjUgKzM1OSwyNSBAQCBkaXN0Y2xlYW4tY29tcGlsZToKKyBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VydmVyLlBvQGFtX19xdW90ZUAKKyAKKyAuYy5vOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgLmMub2JqOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKyAKKyAuYy5sbzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgCS1ybSAtZiAqLmxvCitAQCAtMjc5LDQ5ICszODUsNTQgQEAgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisgCistSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXRweSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JbWtpZCAtZklEICQkdW5pcXVlCistdGFnczogVEFHUworLQorLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQorK3RhZ3M6IHRhZ3MtYW0KKytUQUdTOiB0YWdzCisrCisrdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlzZXQgeDsgXAorIAloZXJlPWBwd2RgOyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXNoaWZ0OyBcCisrCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisgCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKysJICBlbHNlIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgJCR1bmlxdWU7IFwKKysJICBmaTsgXAorIAlmaQorLWN0YWdzOiBDVEFHUworLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorK2N0YWdzOiBjdGFncy1hbQorKworK0NUQUdTOiBjdGFncworK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisgCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorKwkgICAgICQkdW5pcXVlCisgCisgR1RBR1M6CisgCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCistCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKysJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisrCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitAQCAtMzQyLDEzICs0NTMsMTcgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCitAQCAtMzY2LDE2ICs0ODEsMjIgQEAgaW5zdGFsbC1hbTogYWxsLWFtCisgCisgaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KKyBpbnN0YWxsLXN0cmlwOgorLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKysJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAgIGluc3RhbGw7IFwKKysJZWxzZSBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKysJZmkKKyBtb3N0bHljbGVhbi1nZW5lcmljOgorIAorIGNsZWFuLWdlbmVyaWM6CisgCisgZGlzdGNsZWFuLWdlbmVyaWM6CisgCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKyAKKyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKK0BAIC0zOTYsNiArNTE3LDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtYW0KKyAKKytodG1sLWFtOgorKworIGluZm86IGluZm8tYW0KKyAKKyBpbmZvLWFtOgorQEAgLTQwNCwxOCArNTI3LDI4IEBAIGluc3RhbGwtZGF0YS1hbToKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00NDAsMTggKzU3MywxOSBAQCB1bmluc3RhbGwtYW06CisgCisgLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorIAorLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKy0JY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCistCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCistCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorLQlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKy0JaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCistCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisrCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAorKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisrCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKysJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisrCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKysJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKysJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKysJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisrCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysKKyAKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZS9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZS9NYWtlZmlsZS5pbgoraW5kZXggOTc3Y2ZhNS4uYzAwOTgwOCAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZS9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvQ0ZSdW5Mb29wVGltZXJFeGFtcGxlL01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE0LDkgKzE0LDU1IEBACisgCisgQFNFVF9NQUtFQAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zMywzOSArNzksOTMgQEAgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBjaGVja19QUk9HUkFNUyA9IENGUnVuTG9vcFRpbWVyRXhhbXBsZSQoRVhFRVhUKQorIHN1YmRpciA9IGV4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZQorLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisgYW1fQ0ZSdW5Mb29wVGltZXJFeGFtcGxlX09CSkVDVFMgPSBDRlJ1bkxvb3BUaW1lckV4YW1wbGUuJChPQkpFWFQpCisgQ0ZSdW5Mb29wVGltZXJFeGFtcGxlX09CSkVDVFMgPSAkKGFtX0NGUnVuTG9vcFRpbWVyRXhhbXBsZV9PQkpFQ1RTKQorIENGUnVuTG9vcFRpbWVyRXhhbXBsZV9ERVBFTkRFTkNJRVMgPSAgXAorIAkke3RvcF9idWlsZGRpcn0vbGliQ29yZUZvdW5kYXRpb24ubGEKKytBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCisrYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9sdF8wID0gLS1zaWxlbnQKKythbV9fdl9sdF8xID0gCisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlCisgZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworK2FtX19tdiA9IG12IC1mCisgQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisgCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKy1MVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCisrTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKysJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisrCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCisrYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworK2FtX192X0NDXzEgPSAKKyBDQ0xEID0gJChDQykKKy1MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKy0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorLQkkKExERkxBR1MpIC1vICRACisrTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKysJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisrQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKKythbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CisrYW1fX3ZfQ0NMRF8xID0gCisgU09VUkNFUyA9ICQoQ0ZSdW5Mb29wVGltZXJFeGFtcGxlX1NPVVJDRVMpCisgRElTVF9TT1VSQ0VTID0gJChDRlJ1bkxvb3BUaW1lckV4YW1wbGVfU09VUkNFUykKKythbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKysgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKysgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKysgIGVzYWMKKythbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQorKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKysjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKysjICpub3QqIHByZXNlcnZlZC4KKythbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKysgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKysgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisrICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKysnCisrIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCisrYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKysgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKysgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCisgRVRBR1MgPSBldGFncworIENUQUdTID0gY3RhZ3MKKyBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorIEFDTE9DQUwgPSBAQUNMT0NBTEAKKyBBTExPQ0EgPSBAQUxMT0NBQAorIEFNVEFSID0gQEFNVEFSQAorK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorIEFSID0gQEFSQAorIEFTID0gQEFTQAorIEFVVE9DT05GID0gQEFVVE9DT05GQAorQEAgLTExNSw2ICsyMTUsNyBAQCBMTl9TID0gQExOX1NACisgTFRMSUJPQkpTID0gQExUTElCT0JKU0AKKyBNQUlOVCA9IEBNQUlOVEAKKyBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACisgTUtESVJfUCA9IEBNS0RJUl9QQAorIE5NID0gQE5NQAorIE5NRURJVCA9IEBOTUVESVRACitAQCAtMTI3LDYgKzIyOCw3IEBAIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACisgUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKKytQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKKyBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorIFBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorIFBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK0BAIC0xNDcsNiArMjQ5LDcgQEAgYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKKyBhYnNfc3JjZGlyID0gQGFic19zcmNkaXJACisgYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACisgYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorQEAgLTE4MSw3ICsyODQsNiBAQCBsaWJkaXIgPSBAbGliZGlyQAorIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyBsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKKy1sdF9FQ0hPID0gQGx0X0VDSE9ACisgbWFuZGlyID0gQG1hbmRpckAKKyBta2Rpcl9wID0gQG1rZGlyX3BACisgb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorQEAgLTE5NCw2ICsyOTYsNyBAQCBzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKyBzcmNkaXIgPSBAc3JjZGlyQAorIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKyB0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKKyB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyBBTV9DRkxBR1MgPSAtSSR7dG9wX3NyY2Rpcn0vaW5jbHVkZQorQEAgLTIwOCwxNCArMzExLDE0IEBAICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpCisgCUBmb3IgZGVwIGluICQ/OyBkbyBcCisgCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisgCSAgICAqJCRkZXAqKSBcCistCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCistCQkmJiBleGl0IDA7IFwKKysJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisrCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKyAJICAgICAgZXhpdCAxOzsgXAorIAkgIGVzYWM7IFwKKyAJZG9uZTsgXAorLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZS9NYWtlZmlsZSc7IFwKKy0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCistCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9DRlJ1bkxvb3BUaW1lckV4YW1wbGUvTWFrZWZpbGUKKysJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZS9NYWtlZmlsZSc7IFwKKysJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9DRlJ1bkxvb3BUaW1lckV4YW1wbGUvTWFrZWZpbGUKKyAuUFJFQ0lPVVM6IE1ha2VmaWxlCisgTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAlAY2FzZSAnJD8nIGluIFwKK0BAIC0yMzMsMTYgKzMzNiwyMCBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisgCisgY2xlYW4tY2hlY2tQUk9HUkFNUzoKKy0JQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCistCSAgZj1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorLQkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorLQkgIHJtIC1mICQkcCAkJGYgOyBcCistCWRvbmUKKy1DRlJ1bkxvb3BUaW1lckV4YW1wbGUkKEVYRUVYVCk6ICQoQ0ZSdW5Mb29wVGltZXJFeGFtcGxlX09CSkVDVFMpICQoQ0ZSdW5Mb29wVGltZXJFeGFtcGxlX0RFUEVOREVOQ0lFUykgCisrCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisrCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisrCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisrCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisrCXJtIC1mICQkbGlzdAorKworK0NGUnVuTG9vcFRpbWVyRXhhbXBsZSQoRVhFRVhUKTogJChDRlJ1bkxvb3BUaW1lckV4YW1wbGVfT0JKRUNUUykgJChDRlJ1bkxvb3BUaW1lckV4YW1wbGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX0NGUnVuTG9vcFRpbWVyRXhhbXBsZV9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgQ0ZSdW5Mb29wVGltZXJFeGFtcGxlJChFWEVFWFQpCistCSQoTElOSykgJChDRlJ1bkxvb3BUaW1lckV4YW1wbGVfT0JKRUNUUykgJChDRlJ1bkxvb3BUaW1lckV4YW1wbGVfTERBREQpICQoTElCUykKKysJJChBTV9WX0NDTEQpJChMSU5LKSAkKENGUnVuTG9vcFRpbWVyRXhhbXBsZV9PQkpFQ1RTKSAkKENGUnVuTG9vcFRpbWVyRXhhbXBsZV9MREFERCkgJChMSUJTKQorIAorIG1vc3RseWNsZWFuLWNvbXBpbGU6CisgCS1ybSAtZiAqLiQoT0JKRVhUKQorQEAgLTI1MywyNSArMzYwLDI1IEBAIGRpc3RjbGVhbi1jb21waWxlOgorIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9DRlJ1bkxvb3BUaW1lckV4YW1wbGUuUG9AYW1fX3F1b3RlQAorIAorIC5jLm86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyAuYy5vYmo6CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorIAorIC5jLmxvOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyAJLXJtIC1mICoubG8KK0BAIC0yNzksNDkgKzM4Niw1NCBAQCBtb3N0bHljbGVhbi1saWJ0b29sOgorIGNsZWFuLWxpYnRvb2w6CisgCS1ybSAtcmYgLmxpYnMgX2xpYnMKKyAKKy1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtdHB5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlta2lkIC1mSUQgJCR1bmlxdWUKKy10YWdzOiBUQUdTCistCistVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCisrSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCisrdGFnczogdGFncy1hbQorK1RBR1M6IHRhZ3MKKysKKyt0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCXNldCB4OyBcCisgCWhlcmU9YHB3ZGA7IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJc2hpZnQ7IFwKKysJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKyAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCistCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisrCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorKwkgIGVsc2UgXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAkJHVuaXF1ZTsgXAorKwkgIGZpOyBcCisgCWZpCistY3RhZ3M6IENUQUdTCistQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisrY3RhZ3M6IGN0YWdzLWFtCisrCisrQ1RBR1M6IGN0YWdzCisrY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKyAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCistCSAgICAgJCR0YWdzICQkdW5pcXVlCisrCSAgICAgJCR1bmlxdWUKKyAKKyBHVEFHUzoKKyAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKy0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKy0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKysJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisrY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQorKworK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKysJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisrCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAorKwkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCisrCWVzYWM7IFwKKysJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCisrCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorKwkgIGVsc2UgXAorKwkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKKysJICBmaTsgXAorKwlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKKyAKKyBkaXN0Y2xlYW4tdGFnczoKKyAJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKK0BAIC0zNDIsMTMgKzQ1NCwxNyBAQCBkaXN0ZGlyOiAkKERJU1RGSUxFUykKKyAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisgCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKyAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisrCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKysJICAgIGZpOyBcCisgCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKy0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorIAkgICAgZmk7IFwKKy0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKyAJICBlbHNlIFwKKy0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisrCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKyAJICAgIHx8IGV4aXQgMTsgXAorIAkgIGZpOyBcCisgCWRvbmUKK0BAIC0zNjcsMTYgKzQ4MywyMiBAQCBpbnN0YWxsLWFtOiBhbGwtYW0KKyAKKyBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQorIGluc3RhbGwtc3RyaXA6CistCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCistCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCistCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCistCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICAgaW5zdGFsbDsgXAorKwllbHNlIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorKwlmaQorIG1vc3RseWNsZWFuLWdlbmVyaWM6CisgCisgY2xlYW4tZ2VuZXJpYzoKKyAKKyBkaXN0Y2xlYW4tZ2VuZXJpYzoKKyAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisrCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorIAorIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorQEAgLTM5OCw2ICs1MjAsOCBAQCBkdmktYW06CisgCisgaHRtbDogaHRtbC1hbQorIAorK2h0bWwtYW06CisrCisgaW5mbzogaW5mby1hbQorIAorIGluZm8tYW06CitAQCAtNDA2LDE4ICs1MzAsMjggQEAgaW5zdGFsbC1kYXRhLWFtOgorIAorIGluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorIAorK2luc3RhbGwtZHZpLWFtOgorKworIGluc3RhbGwtZXhlYy1hbToKKyAKKyBpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorIAorK2luc3RhbGwtaHRtbC1hbToKKysKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorK2luc3RhbGwtaW5mby1hbToKKysKKyBpbnN0YWxsLW1hbjoKKyAKKyBpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKyAKKytpbnN0YWxsLXBkZi1hbToKKysKKyBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisgCisraW5zdGFsbC1wcy1hbToKKysKKyBpbnN0YWxsY2hlY2stYW06CisgCisgbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorQEAgLTQ0MCwxMSArNTc0LDExIEBAIHBzLWFtOgorIAorIHVuaW5zdGFsbC1hbToKKyAKKy0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisrLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorIAorLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCistCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIFwKKy0JZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKysuUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCisrCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gXAorKwljdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorIAlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisgCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorIAlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKK0BAIC00NTQsNyArNTg4LDcgQEAgdW5pbnN0YWxsLWFtOgorIAlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorLQl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysJdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKyAKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBjaGVjazoKK0BAIC00NzQsNiArNjA4LDcgQEAgdW5pbnN0YWxsLWFtOgorIAorIEBDRl9CVUlMRF9URVNUU19UUlVFQHZhbGdyaW5kOgorIEBDRl9CVUlMRF9URVNUU19UUlVFQAkke0xJQlRPT0x9IC0tbW9kZSBleGVjdXRlICR7QH0gJHtWQUxHUklOREZMQUdTfSAuL0NGUnVuTG9vcFRpbWVyRXhhbXBsZQorKworICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisgLk5PRVhQT1JUOgorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbgoraW5kZXggNWRmOGE5My4uNTU1ZjMwZSAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvQ0ZUZXN0L01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE1LDkgKzE1LDU1IEBACisgQFNFVF9NQUtFQAorIAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zNCw0MSArODAsOTQgQEAgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBFWFRSQV9QUk9HUkFNUyA9IENGVGVzdCQoRVhFRVhUKQorIHN1YmRpciA9IGV4YW1wbGVzL0NGVGVzdAorLURJU1RfQ09NTU9OID0gJChub2luc3RfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKy0JJChzcmNkaXIpL01ha2VmaWxlLmluCisrRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycyBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAgJChub2luc3RfSEVBREVSUykKKyBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisgYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWNpbmNsdWRlLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKysJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisgCSQoQUNMT0NBTF9NNCkKKyBta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycworIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jb25maWcuaAorIENPTkZJR19DTEVBTl9GSUxFUyA9CisrQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KKyBhbV9DRlRlc3RfT0JKRUNUUyA9IENGVGVzdC1tYWluLiQoT0JKRVhUKSBDRlRlc3QtQ0ZUZXN0LiQoT0JKRVhUKSBcCisgCUNGVGVzdC1TdXBlclN0cmluZy4kKE9CSkVYVCkgQ0ZUZXN0LUNGVXRpbHMuJChPQkpFWFQpCisgQ0ZUZXN0X09CSkVDVFMgPSAkKGFtX0NGVGVzdF9PQkpFQ1RTKQorIENGVGVzdF9ERVBFTkRFTkNJRVMgPSAke3RvcF9idWlsZGRpcn0vbGliQ29yZUZvdW5kYXRpb24ubGEKKytBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCisrYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9sdF8wID0gLS1zaWxlbnQKKythbV9fdl9sdF8xID0gCisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlCisgZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworK2FtX19tdiA9IG12IC1mCisgQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorIAkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorLUxUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKy0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKKytMVENYWENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSBcCisrCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorKwkkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorK0FNX1ZfQ1hYID0gJChhbV9fdl9DWFhfQEFNX1ZAKQorK2FtX192X0NYWF8gPSAkKGFtX192X0NYWF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DWFhfMCA9IEBlY2hvICIgIENYWCAgICAgIiAkQDsKKythbV9fdl9DWFhfMSA9IAorIENYWExEID0gJChDWFgpCistQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKy0JJChMREZMQUdTKSAtbyAkQAorK0NYWExJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCisrCSQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorK0FNX1ZfQ1hYTEQgPSAkKGFtX192X0NYWExEX0BBTV9WQCkKKythbV9fdl9DWFhMRF8gPSAkKGFtX192X0NYWExEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NYWExEXzAgPSBAZWNobyAiICBDWFhMRCAgICIgJEA7CisrYW1fX3ZfQ1hYTERfMSA9IAorIFNPVVJDRVMgPSAkKENGVGVzdF9TT1VSQ0VTKQorIERJU1RfU09VUkNFUyA9ICQoQ0ZUZXN0X1NPVVJDRVMpCisrYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisrICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKysgICAgbnxub3xOTykgZmFsc2U7OyBcCisrICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisrICBlc2FjCisgSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCisrYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKysjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisrIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCisrIyAqbm90KiBwcmVzZXJ2ZWQuCisrYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisrICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCisrICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisrJworKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKysjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKysjIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgorK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisrICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKyAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisrICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAorIEVUQUdTID0gZXRhZ3MKKyBDVEFHUyA9IGN0YWdzCisgRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKyBBQ0xPQ0FMID0gQEFDTE9DQUxACisgQUxMT0NBID0gQEFMTE9DQUAKKyBBTVRBUiA9IEBBTVRBUkAKKytBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKKyBBUiA9IEBBUkAKKyBBUyA9IEBBU0AKKyBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0BAIC0xMTgsNiArMjE3LDcgQEAgTE5fUyA9IEBMTl9TQAorIExUTElCT0JKUyA9IEBMVExJQk9CSlNACisgTUFJTlQgPSBATUFJTlRACisgTUFLRUlORk8gPSBATUFLRUlORk9ACisrTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorIE1LRElSX1AgPSBATUtESVJfUEAKKyBOTSA9IEBOTUAKKyBOTUVESVQgPSBATk1FRElUQAorQEAgLTEzMCw2ICsyMzAsNyBAQCBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKyBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorIFBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorIFBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACisrUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyBQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKKyBQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitAQCAtMTUwLDYgKzI1MSw3IEBAIGFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACisgYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorIGFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKKyBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKKythY19jdF9BUiA9IEBhY19jdF9BUkAKKyBhY19jdF9DQyA9IEBhY19jdF9DQ0AKKyBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK0BAIC0xODQsNyArMjg2LDYgQEAgbGliZGlyID0gQGxpYmRpckAKKyBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKKyBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACistbHRfRUNITyA9IEBsdF9FQ0hPQAorIG1hbmRpciA9IEBtYW5kaXJACisgbWtkaXJfcCA9IEBta2Rpcl9wQAorIG9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK0BAIC0xOTcsNiArMjk4LDcgQEAgc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACisgc3JjZGlyID0gQHNyY2RpckAKKyBzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACisgdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKyt0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACisgdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKKyB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisgRVhUUkFfRElTVCA9IENoaXF1aXRpdGEueG1sIFwKK0BAIC0yMzEsMTQgKzMzMywxNCBAQCAkKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorLQkJJiYgZXhpdCAwOyBcCisrCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisgCSAgICAgIGV4aXQgMTs7IFwKKyAJICBlc2FjOyBcCisgCWRvbmU7IFwKKy0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9DRlRlc3QvTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXhhbXBsZXMvQ0ZUZXN0L01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9DRlRlc3QvTWFrZWZpbGUnOyBcCisrCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKysJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvQ0ZUZXN0L01ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtMjU2LDkgKzM1OCwxMSBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorLUNGVGVzdCQoRVhFRVhUKTogJChDRlRlc3RfT0JKRUNUUykgJChDRlRlc3RfREVQRU5ERU5DSUVTKSAKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorKworK0NGVGVzdCQoRVhFRVhUKTogJChDRlRlc3RfT0JKRUNUUykgJChDRlRlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX0NGVGVzdF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgQ0ZUZXN0JChFWEVFWFQpCistCSQoQ1hYTElOSykgJChDRlRlc3RfT0JKRUNUUykgJChDRlRlc3RfTERBREQpICQoTElCUykKKysJJChBTV9WX0NYWExEKSQoQ1hYTElOSykgJChDRlRlc3RfT0JKRUNUUykgJChDRlRlc3RfTERBREQpICQoTElCUykKKyAKKyBtb3N0bHljbGVhbi1jb21waWxlOgorIAktcm0gLWYgKi4kKE9CSkVYVCkKK0BAIC0yNzIsODEgKzM3Niw4MSBAQCBkaXN0Y2xlYW4tY29tcGlsZToKKyBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvQ0ZUZXN0LW1haW4uUG9AYW1fX3F1b3RlQAorIAorIC5jcHAubzoKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyAuY3BwLm9iajoKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorIAorIC5jcHAubG86CistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChMVENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChMVENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgQ0ZUZXN0LW1haW4ubzogc291cmNlL21haW4vbWFpbi5jcHAKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIENGVGVzdC1tYWluLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1tYWluLlRwbyAtYyAtbyBDRlRlc3QtbWFpbi5vIGB0ZXN0IC1mICdzb3VyY2UvbWFpbi9tYWluLmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL21haW4vbWFpbi5jcHAKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJbXYgLWYgJChERVBESVIpL0NGVGVzdC1tYWluLlRwbyAkKERFUERJUikvQ0ZUZXN0LW1haW4uUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nc291cmNlL21haW4vbWFpbi5jcHAnIG9iamVjdD0nQ0ZUZXN0LW1haW4ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIENGVGVzdC1tYWluLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1tYWluLlRwbyAtYyAtbyBDRlRlc3QtbWFpbi5vIGB0ZXN0IC1mICdzb3VyY2UvbWFpbi9tYWluLmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL21haW4vbWFpbi5jcHAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvQ0ZUZXN0LW1haW4uVHBvICQoREVQRElSKS9DRlRlc3QtbWFpbi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J3NvdXJjZS9tYWluL21haW4uY3BwJyBvYmplY3Q9J0NGVGVzdC1tYWluLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gQ0ZUZXN0LW1haW4ubyBgdGVzdCAtZiAnc291cmNlL21haW4vbWFpbi5jcHAnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvdXJjZS9tYWluL21haW4uY3BwCisrQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gQ0ZUZXN0LW1haW4ubyBgdGVzdCAtZiAnc291cmNlL21haW4vbWFpbi5jcHAnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvdXJjZS9tYWluL21haW4uY3BwCisgCisgQ0ZUZXN0LW1haW4ub2JqOiBzb3VyY2UvbWFpbi9tYWluLmNwcAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgQ0ZUZXN0LW1haW4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9DRlRlc3QtbWFpbi5UcG8gLWMgLW8gQ0ZUZXN0LW1haW4ub2JqIGBpZiB0ZXN0IC1mICdzb3VyY2UvbWFpbi9tYWluLmNwcCc7IHRoZW4gJChDWUdQQVRIX1cpICdzb3VyY2UvbWFpbi9tYWluLmNwcCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc291cmNlL21haW4vbWFpbi5jcHAnOyBmaWAKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJbXYgLWYgJChERVBESVIpL0NGVGVzdC1tYWluLlRwbyAkKERFUERJUikvQ0ZUZXN0LW1haW4uUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nc291cmNlL21haW4vbWFpbi5jcHAnIG9iamVjdD0nQ0ZUZXN0LW1haW4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgQ0ZUZXN0LW1haW4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9DRlRlc3QtbWFpbi5UcG8gLWMgLW8gQ0ZUZXN0LW1haW4ub2JqIGBpZiB0ZXN0IC1mICdzb3VyY2UvbWFpbi9tYWluLmNwcCc7IHRoZW4gJChDWUdQQVRIX1cpICdzb3VyY2UvbWFpbi9tYWluLmNwcCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc291cmNlL21haW4vbWFpbi5jcHAnOyBmaWAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvQ0ZUZXN0LW1haW4uVHBvICQoREVQRElSKS9DRlRlc3QtbWFpbi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J3NvdXJjZS9tYWluL21haW4uY3BwJyBvYmplY3Q9J0NGVGVzdC1tYWluLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBDRlRlc3QtbWFpbi5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9tYWluL21haW4uY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9tYWluL21haW4uY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2UvbWFpbi9tYWluLmNwcCc7IGZpYAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1tYWluLm9iaiBgaWYgdGVzdCAtZiAnc291cmNlL21haW4vbWFpbi5jcHAnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc291cmNlL21haW4vbWFpbi5jcHAnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NvdXJjZS9tYWluL21haW4uY3BwJzsgZmlgCisgCisgQ0ZUZXN0LUNGVGVzdC5vOiBzb3VyY2UvbWFpbi9DRlRlc3QuY3BwCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBDRlRlc3QtQ0ZUZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1DRlRlc3QuVHBvIC1jIC1vIENGVGVzdC1DRlRlc3QubyBgdGVzdCAtZiAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL21haW4vQ0ZUZXN0LmNwcAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvQ0ZUZXN0LUNGVGVzdC5UcG8gJChERVBESVIpL0NGVGVzdC1DRlRlc3QuUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgb2JqZWN0PSdDRlRlc3QtQ0ZUZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBDRlRlc3QtQ0ZUZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1DRlRlc3QuVHBvIC1jIC1vIENGVGVzdC1DRlRlc3QubyBgdGVzdCAtZiAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL21haW4vQ0ZUZXN0LmNwcAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9DRlRlc3QtQ0ZUZXN0LlRwbyAkKERFUERJUikvQ0ZUZXN0LUNGVGVzdC5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J3NvdXJjZS9tYWluL0NGVGVzdC5jcHAnIG9iamVjdD0nQ0ZUZXN0LUNGVGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1DRlRlc3QubyBgdGVzdCAtZiAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL21haW4vQ0ZUZXN0LmNwcAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1DRlRlc3QubyBgdGVzdCAtZiAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL21haW4vQ0ZUZXN0LmNwcAorIAorIENGVGVzdC1DRlRlc3Qub2JqOiBzb3VyY2UvbWFpbi9DRlRlc3QuY3BwCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBDRlRlc3QtQ0ZUZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvQ0ZUZXN0LUNGVGVzdC5UcG8gLWMgLW8gQ0ZUZXN0LUNGVGVzdC5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9tYWluL0NGVGVzdC5jcHAnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc291cmNlL21haW4vQ0ZUZXN0LmNwcCc7IGZpYAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvQ0ZUZXN0LUNGVGVzdC5UcG8gJChERVBESVIpL0NGVGVzdC1DRlRlc3QuUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgb2JqZWN0PSdDRlRlc3QtQ0ZUZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIENGVGVzdC1DRlRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9DRlRlc3QtQ0ZUZXN0LlRwbyAtYyAtbyBDRlRlc3QtQ0ZUZXN0Lm9iaiBgaWYgdGVzdCAtZiAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCc7IHRoZW4gJChDWUdQQVRIX1cpICdzb3VyY2UvbWFpbi9DRlRlc3QuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2UvbWFpbi9DRlRlc3QuY3BwJzsgZmlgCisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL0NGVGVzdC1DRlRlc3QuVHBvICQoREVQRElSKS9DRlRlc3QtQ0ZUZXN0LlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nc291cmNlL21haW4vQ0ZUZXN0LmNwcCcgb2JqZWN0PSdDRlRlc3QtQ0ZUZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBDRlRlc3QtQ0ZUZXN0Lm9iaiBgaWYgdGVzdCAtZiAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCc7IHRoZW4gJChDWUdQQVRIX1cpICdzb3VyY2UvbWFpbi9DRlRlc3QuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2UvbWFpbi9DRlRlc3QuY3BwJzsgZmlgCisrQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gQ0ZUZXN0LUNGVGVzdC5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9tYWluL0NGVGVzdC5jcHAnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc291cmNlL21haW4vQ0ZUZXN0LmNwcCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc291cmNlL21haW4vQ0ZUZXN0LmNwcCc7IGZpYAorIAorIENGVGVzdC1TdXBlclN0cmluZy5vOiBzb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgQ0ZUZXN0LVN1cGVyU3RyaW5nLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1TdXBlclN0cmluZy5UcG8gLWMgLW8gQ0ZUZXN0LVN1cGVyU3RyaW5nLm8gYHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvQ0ZUZXN0LVN1cGVyU3RyaW5nLlRwbyAkKERFUERJUikvQ0ZUZXN0LVN1cGVyU3RyaW5nLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJyBvYmplY3Q9J0NGVGVzdC1TdXBlclN0cmluZy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgQ0ZUZXN0LVN1cGVyU3RyaW5nLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1TdXBlclN0cmluZy5UcG8gLWMgLW8gQ0ZUZXN0LVN1cGVyU3RyaW5nLm8gYHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9DRlRlc3QtU3VwZXJTdHJpbmcuVHBvICQoREVQRElSKS9DRlRlc3QtU3VwZXJTdHJpbmcuUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSdzb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcCcgb2JqZWN0PSdDRlRlc3QtU3VwZXJTdHJpbmcubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBDRlRlc3QtU3VwZXJTdHJpbmcubyBgdGVzdCAtZiAnc291cmNlL3NoYXJlZC9TdXBlclN0cmluZy5jcHAnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwCisrQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gQ0ZUZXN0LVN1cGVyU3RyaW5nLm8gYHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcAorIAorIENGVGVzdC1TdXBlclN0cmluZy5vYmo6IHNvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBDRlRlc3QtU3VwZXJTdHJpbmcub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9DRlRlc3QtU3VwZXJTdHJpbmcuVHBvIC1jIC1vIENGVGVzdC1TdXBlclN0cmluZy5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcCc7IGZpYAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvQ0ZUZXN0LVN1cGVyU3RyaW5nLlRwbyAkKERFUERJUikvQ0ZUZXN0LVN1cGVyU3RyaW5nLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJyBvYmplY3Q9J0NGVGVzdC1TdXBlclN0cmluZy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBDRlRlc3QtU3VwZXJTdHJpbmcub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9DRlRlc3QtU3VwZXJTdHJpbmcuVHBvIC1jIC1vIENGVGVzdC1TdXBlclN0cmluZy5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcCc7IGZpYAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9DRlRlc3QtU3VwZXJTdHJpbmcuVHBvICQoREVQRElSKS9DRlRlc3QtU3VwZXJTdHJpbmcuUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSdzb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcCcgb2JqZWN0PSdDRlRlc3QtU3VwZXJTdHJpbmcub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1TdXBlclN0cmluZy5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcCc7IGZpYAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1TdXBlclN0cmluZy5vYmogYGlmIHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9zaGFyZWQvU3VwZXJTdHJpbmcuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2Uvc2hhcmVkL1N1cGVyU3RyaW5nLmNwcCc7IGZpYAorIAorIENGVGVzdC1DRlV0aWxzLm86IHNvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIENGVGVzdC1DRlV0aWxzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1DRlV0aWxzLlRwbyAtYyAtbyBDRlRlc3QtQ0ZVdGlscy5vIGB0ZXN0IC1mICdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACW12IC1mICQoREVQRElSKS9DRlRlc3QtQ0ZVdGlscy5UcG8gJChERVBESVIpL0NGVGVzdC1DRlV0aWxzLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnIG9iamVjdD0nQ0ZUZXN0LUNGVXRpbHMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIENGVGVzdC1DRlV0aWxzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL0NGVGVzdC1DRlV0aWxzLlRwbyAtYyAtbyBDRlRlc3QtQ0ZVdGlscy5vIGB0ZXN0IC1mICdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwCisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL0NGVGVzdC1DRlV0aWxzLlRwbyAkKERFUERJUikvQ0ZUZXN0LUNGVXRpbHMuUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJyBvYmplY3Q9J0NGVGVzdC1DRlV0aWxzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gQ0ZUZXN0LUNGVXRpbHMubyBgdGVzdCAtZiAnc291cmNlL3NoYXJlZC9DRlV0aWxzLmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgc291cmNlL3NoYXJlZC9DRlV0aWxzLmNwcAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1DRlV0aWxzLm8gYHRlc3QgLWYgJ3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAKKyAKKyBDRlRlc3QtQ0ZVdGlscy5vYmo6IHNvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIENGVGVzdC1DRlV0aWxzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvQ0ZUZXN0LUNGVXRpbHMuVHBvIC1jIC1vIENGVGVzdC1DRlV0aWxzLm9iaiBgaWYgdGVzdCAtZiAnc291cmNlL3NoYXJlZC9DRlV0aWxzLmNwcCc7IHRoZW4gJChDWUdQQVRIX1cpICdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJzsgZmlgCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACW12IC1mICQoREVQRElSKS9DRlRlc3QtQ0ZVdGlscy5UcG8gJChERVBESVIpL0NGVGVzdC1DRlV0aWxzLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnIG9iamVjdD0nQ0ZUZXN0LUNGVXRpbHMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQ0ZUZXN0X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgQ0ZUZXN0LUNGVXRpbHMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9DRlRlc3QtQ0ZVdGlscy5UcG8gLWMgLW8gQ0ZUZXN0LUNGVXRpbHMub2JqIGBpZiB0ZXN0IC1mICdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnOyBmaWAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvQ0ZUZXN0LUNGVXRpbHMuVHBvICQoREVQRElSKS9DRlRlc3QtQ0ZVdGlscy5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnIG9iamVjdD0nQ0ZUZXN0LUNGVXRpbHMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChDRlRlc3RfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIENGVGVzdC1DRlV0aWxzLm9iaiBgaWYgdGVzdCAtZiAnc291cmNlL3NoYXJlZC9DRlV0aWxzLmNwcCc7IHRoZW4gJChDWUdQQVRIX1cpICdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJzsgZmlgCisrQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKENGVGVzdF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gQ0ZUZXN0LUNGVXRpbHMub2JqIGBpZiB0ZXN0IC1mICdzb3VyY2Uvc2hhcmVkL0NGVXRpbHMuY3BwJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NvdXJjZS9zaGFyZWQvQ0ZVdGlscy5jcHAnOyBmaWAKKyAKKyBtb3N0bHljbGVhbi1saWJ0b29sOgorIAktcm0gLWYgKi5sbworQEAgLTM1NCw0OSArNDU4LDU0IEBAIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgY2xlYW4tbGlidG9vbDoKKyAJLXJtIC1yZiAubGlicyBfbGlicworIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKytJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKKyt0YWdzOiB0YWdzLWFtCisrVEFHUzogdGFncworKworK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJc2V0IHg7IFwKKyAJaGVyZT1gcHdkYDsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwlzaGlmdDsgXAorKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKy0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCistCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKysJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICQkdW5pcXVlOyBcCisrCSAgZmk7IFwKKyAJZmkKKy1jdGFnczogQ1RBR1MKKy1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKytjdGFnczogY3RhZ3MtYW0KKysKKytDVEFHUzogY3RhZ3MKKytjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKy0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKysJICAgICAkJHVuaXF1ZQorIAorIEdUQUdTOgorIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAorLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisrCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKytjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisrCisrY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKwljYXNlICIkKHNyY2RpcikiIGluIFwKKysJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisrCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKysJZXNhYzsgXAorKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKysJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisrCSAgZWxzZSBcCisrCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorKwkgIGZpOyBcCisrCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworIAorIGRpc3RjbGVhbi10YWdzOgorIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworQEAgLTQxNywxMyArNTI2LDE3IEBAIGRpc3RkaXI6ICQoRElTVEZJTEVTKQorIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKyAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorIAkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKysJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorKwkgICAgZmk7IFwKKyAJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisgCSAgICBmaTsgXAorLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorIAkgIGVsc2UgXAorLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCistCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKysJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisrCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorIAkgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKKyAJZG9uZQorQEAgLTQ0MSwxNiArNTU0LDIyIEBAIGluc3RhbGwtYW06IGFsbC1hbQorIAorIGluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCisgaW5zdGFsbC1zdHJpcDoKKy0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKy0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKy0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisrCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgICBpbnN0YWxsOyBcCisrCWVsc2UgXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisrCWZpCisgbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyAKKyBjbGVhbi1nZW5lcmljOgorIAorIGRpc3RjbGVhbi1nZW5lcmljOgorIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisgCisgbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCitAQCAtNDcxLDYgKzU5MCw4IEBAIGR2aS1hbToKKyAKKyBodG1sOiBodG1sLWFtCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLWFtCisgCisgaW5mby1hbToKK0BAIC00NzksMTggKzYwMCwyOCBAQCBpbnN0YWxsLWRhdGEtYW06CisgCisgaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisgCisraW5zdGFsbC1kdmktYW06CisrCisgaW5zdGFsbC1leGVjLWFtOgorIAorIGluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisgCisraW5zdGFsbC1odG1sLWFtOgorKworIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCisraW5zdGFsbC1pbmZvLWFtOgorKworIGluc3RhbGwtbWFuOgorIAorIGluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorIAorK2luc3RhbGwtcGRmLWFtOgorKworIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKyAKKytpbnN0YWxsLXBzLWFtOgorKworIGluc3RhbGxjaGVjay1hbToKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCitAQCAtNTE1LDE4ICs2NDYsMTggQEAgdW5pbnN0YWxsLWFtOgorIAorIC5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKyAKKy0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCistCWNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKy0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAorLQlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKy0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKy0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCistCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKy0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKy0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCistCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorKy5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorKwljbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIFwKKysJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisrCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKysJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisrCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisrCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisrCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKysJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisgCisgCisgQENGX0JVSUxEX1RFU1RTX1RSVUVAZGRkIGdkYjogQ0ZUZXN0CitAQCAtNTM0LDYgKzY2NSw3IEBAIHVuaW5zdGFsbC1hbToKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUB2YWxncmluZDogQ0ZUZXN0CisgQENGX0JVSUxEX1RFU1RTX1RSVUVACSR7TElCVE9PTH0gLS1tb2RlIGV4ZWN1dGUgJHtAfSAke1ZBTEdSSU5ERkxBR1N9IC4vQ0ZUZXN0CisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvRE5TU2VydmljZU1ldGFRdWVyeS9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL0ROU1NlcnZpY2VNZXRhUXVlcnkvTWFrZWZpbGUuaW4KK2luZGV4IDgwMTI1MWYuLjJkMjk3ZmEgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5L01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5L01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE0LDkgKzE0LDU1IEBACisgCisgQFNFVF9NQUtFQAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zMywzOSArNzksOTMgQEAgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBFWFRSQV9QUk9HUkFNUyA9IEROU1NlcnZpY2VNZXRhUXVlcnkkKEVYRUVYVCkKKyBzdWJkaXIgPSBleGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5CistRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCisrRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycyBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisgYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWNpbmNsdWRlLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKysJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisgCSQoQUNMT0NBTF9NNCkKKyBta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycworIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jb25maWcuaAorIENPTkZJR19DTEVBTl9GSUxFUyA9CisrQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KKyBhbV9ETlNTZXJ2aWNlTWV0YVF1ZXJ5X09CSkVDVFMgPSBETlNTZXJ2aWNlTWV0YVF1ZXJ5LiQoT0JKRVhUKQorIEROU1NlcnZpY2VNZXRhUXVlcnlfT0JKRUNUUyA9ICQoYW1fRE5TU2VydmljZU1ldGFRdWVyeV9PQkpFQ1RTKQorIEROU1NlcnZpY2VNZXRhUXVlcnlfREVQRU5ERU5DSUVTID0gIFwKKyAJJHt0b3BfYnVpbGRkaXJ9L2xpYkNvcmVGb3VuZGF0aW9uLmxhCisrQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfbHRfMCA9IC0tc2lsZW50CisrYW1fX3ZfbHRfMSA9IAorK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCisrYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfUF8wID0gZmFsc2UKKythbV9fdl9QXzEgPSA6CisrQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCisrYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworK2FtX192X0dFTl8xID0gCisrQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfYXRfMCA9IEAKKythbV9fdl9hdF8xID0gCisgREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZQorIGRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKKythbV9fbXYgPSBtdiAtZgorIENPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorIAkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCistTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKy0JLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKy0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisrCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCisrQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKKythbV9fdl9DQ18xID0gCisgQ0NMRCA9ICQoQ0MpCistTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKy0JJChMREZMQUdTKSAtbyAkQAorK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisrCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCisrYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOworK2FtX192X0NDTERfMSA9IAorIFNPVVJDRVMgPSAkKEROU1NlcnZpY2VNZXRhUXVlcnlfU09VUkNFUykKKyBESVNUX1NPVVJDRVMgPSAkKEROU1NlcnZpY2VNZXRhUXVlcnlfU09VUkNFUykKKythbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKKysgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorKyAgICBufG5vfE5PKSBmYWxzZTs7IFwKKysgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKKysgIGVzYWMKKythbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQorKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKysjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKysjICpub3QqIHByZXNlcnZlZC4KKythbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKysgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKysgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisrICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKysnCisrIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCisrYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKysgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKysgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCisgRVRBR1MgPSBldGFncworIENUQUdTID0gY3RhZ3MKKyBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorIEFDTE9DQUwgPSBAQUNMT0NBTEAKKyBBTExPQ0EgPSBAQUxMT0NBQAorIEFNVEFSID0gQEFNVEFSQAorK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorIEFSID0gQEFSQAorIEFTID0gQEFTQAorIEFVVE9DT05GID0gQEFVVE9DT05GQAorQEAgLTExNSw2ICsyMTUsNyBAQCBMTl9TID0gQExOX1NACisgTFRMSUJPQkpTID0gQExUTElCT0JKU0AKKyBNQUlOVCA9IEBNQUlOVEAKKyBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACisgTUtESVJfUCA9IEBNS0RJUl9QQAorIE5NID0gQE5NQAorIE5NRURJVCA9IEBOTUVESVRACitAQCAtMTI3LDYgKzIyOCw3IEBAIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACisgUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKKytQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKKyBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorIFBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorIFBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK0BAIC0xNDcsNiArMjQ5LDcgQEAgYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKKyBhYnNfc3JjZGlyID0gQGFic19zcmNkaXJACisgYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACisgYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorQEAgLTE4MSw3ICsyODQsNiBAQCBsaWJkaXIgPSBAbGliZGlyQAorIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyBsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKKy1sdF9FQ0hPID0gQGx0X0VDSE9ACisgbWFuZGlyID0gQG1hbmRpckAKKyBta2Rpcl9wID0gQG1rZGlyX3BACisgb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorQEAgLTE5NCw2ICsyOTYsNyBAQCBzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKyBzcmNkaXIgPSBAc3JjZGlyQAorIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKyB0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKKyB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyBBTV9DRkxBR1MgPSAtSSR7dG9wX3NyY2Rpcn0vaW5jbHVkZQorQEAgLTIxMCwxNCArMzEzLDE0IEBAICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpCisgCUBmb3IgZGVwIGluICQ/OyBkbyBcCisgCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisgCSAgICAqJCRkZXAqKSBcCistCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCistCQkmJiBleGl0IDA7IFwKKysJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisrCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKyAJICAgICAgZXhpdCAxOzsgXAorIAkgIGVzYWM7IFwKKyAJZG9uZTsgXAorLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL0ROU1NlcnZpY2VNZXRhUXVlcnkvTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXhhbXBsZXMvRE5TU2VydmljZU1ldGFRdWVyeS9NYWtlZmlsZQorKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvRE5TU2VydmljZU1ldGFRdWVyeS9NYWtlZmlsZSc7IFwKKysJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5L01ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtMjM1LDkgKzMzOCwxMSBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorLUROU1NlcnZpY2VNZXRhUXVlcnkkKEVYRUVYVCk6ICQoRE5TU2VydmljZU1ldGFRdWVyeV9PQkpFQ1RTKSAkKEROU1NlcnZpY2VNZXRhUXVlcnlfREVQRU5ERU5DSUVTKSAKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorKworK0ROU1NlcnZpY2VNZXRhUXVlcnkkKEVYRUVYVCk6ICQoRE5TU2VydmljZU1ldGFRdWVyeV9PQkpFQ1RTKSAkKEROU1NlcnZpY2VNZXRhUXVlcnlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX0ROU1NlcnZpY2VNZXRhUXVlcnlfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIEROU1NlcnZpY2VNZXRhUXVlcnkkKEVYRUVYVCkKKy0JJChMSU5LKSAkKEROU1NlcnZpY2VNZXRhUXVlcnlfT0JKRUNUUykgJChETlNTZXJ2aWNlTWV0YVF1ZXJ5X0xEQUREKSAkKExJQlMpCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgJChETlNTZXJ2aWNlTWV0YVF1ZXJ5X09CSkVDVFMpICQoRE5TU2VydmljZU1ldGFRdWVyeV9MREFERCkgJChMSUJTKQorIAorIG1vc3RseWNsZWFuLWNvbXBpbGU6CisgCS1ybSAtZiAqLiQoT0JKRVhUKQorQEAgLTI0OCwyNSArMzUzLDI1IEBAIGRpc3RjbGVhbi1jb21waWxlOgorIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ETlNTZXJ2aWNlTWV0YVF1ZXJ5LlBvQGFtX19xdW90ZUAKKyAKKyAuYy5vOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgLmMub2JqOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKyAKKyAuYy5sbzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgCS1ybSAtZiAqLmxvCitAQCAtMjc0LDQ5ICszNzksNTQgQEAgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisgCistSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXRweSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JbWtpZCAtZklEICQkdW5pcXVlCistdGFnczogVEFHUworLQorLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQorK3RhZ3M6IHRhZ3MtYW0KKytUQUdTOiB0YWdzCisrCisrdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlzZXQgeDsgXAorIAloZXJlPWBwd2RgOyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXNoaWZ0OyBcCisrCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisgCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKysJICBlbHNlIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgJCR1bmlxdWU7IFwKKysJICBmaTsgXAorIAlmaQorLWN0YWdzOiBDVEFHUworLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorK2N0YWdzOiBjdGFncy1hbQorKworK0NUQUdTOiBjdGFncworK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisgCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorKwkgICAgICQkdW5pcXVlCisgCisgR1RBR1M6CisgCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCistCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKysJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisrCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitAQCAtMzM3LDEzICs0NDcsMTcgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCitAQCAtMzYxLDE2ICs0NzUsMjIgQEAgaW5zdGFsbC1hbTogYWxsLWFtCisgCisgaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KKyBpbnN0YWxsLXN0cmlwOgorLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKysJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAgIGluc3RhbGw7IFwKKysJZWxzZSBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKysJZmkKKyBtb3N0bHljbGVhbi1nZW5lcmljOgorIAorIGNsZWFuLWdlbmVyaWM6CisgCisgZGlzdGNsZWFuLWdlbmVyaWM6CisgCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKyAKKyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKK0BAIC0zOTEsNiArNTExLDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtYW0KKyAKKytodG1sLWFtOgorKworIGluZm86IGluZm8tYW0KKyAKKyBpbmZvLWFtOgorQEAgLTM5OSwxOCArNTIxLDI4IEBAIGluc3RhbGwtZGF0YS1hbToKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00MzUsMTggKzU2NywxOSBAQCB1bmluc3RhbGwtYW06CisgCisgLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorIAorLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKy0JY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorLQlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCistCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCistCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorLQlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKy0JaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCistCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisrCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAorKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisrCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKysJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisrCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKysJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKysJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKysJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisrCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysKKyAKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0Rpc3BsYXlVUkwvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9EaXNwbGF5VVJML01ha2VmaWxlLmluCitpbmRleCA4NjhkOWJlLi4zZjg5YzFjIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvRGlzcGxheVVSTC9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvRGlzcGxheVVSTC9NYWtlZmlsZS5pbgorQEAgLTEsOCArMSw4IEBACistIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMC4xIGZyb20gTWFrZWZpbGUuYW0uCisrIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNC4xIGZyb20gTWFrZWZpbGUuYW0uCisgIyBAY29uZmlndXJlX2lucHV0QAorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorLSMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKyAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK0BAIC0xNCw5ICsxNCw1NSBAQAorIAorIEBTRVRfTUFLRUAKKyBWUEFUSCA9IEBzcmNkaXJACisrYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisrICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisrICAgICAgPykgOzsgXAorKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisrICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorKyAgICAgICAgIGV4aXQgMTs7IFwKKysgIGVzYWM7IFwKKysgIGhhc19vcHQ9bm87IFwKKysgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisrICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorKyAgZWxzZSBcCisrICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorKyAgICAgICpcXFtcIFwJXSopIFwKKysgICAgICAgIGJzPVxcOyBcCisrICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKysgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisrICAgIGVzYWM7IFwKKysgIGZpOyBcCisrICBza2lwX25leHQ9bm87IFwKKysgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKysgIHsgXAorKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorKyAgfTsgXAorKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisrICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKysgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisrICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgIGVzYWM7IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKysgICAgZXNhYzsgXAorKyAgZG9uZTsgXAorKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKKythbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACistcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKKyBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCisgaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKKyBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitAQCAtMzMsMzggKzc5LDkyIEBAIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2tfUFJPR1JBTVMgPSBEaXNwbGF5VVJMJChFWEVFWFQpCisgc3ViZGlyID0gZXhhbXBsZXMvRGlzcGxheVVSTAorLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisgYW1fRGlzcGxheVVSTF9PQkpFQ1RTID0gRGlzcGxheVVSTC4kKE9CSkVYVCkKKyBEaXNwbGF5VVJMX09CSkVDVFMgPSAkKGFtX0Rpc3BsYXlVUkxfT0JKRUNUUykKKyBEaXNwbGF5VVJMX0RFUEVOREVOQ0lFUyA9ICR7dG9wX2J1aWxkZGlyfS9saWJDb3JlRm91bmRhdGlvbi5sYQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKyAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKysJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKKythbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CisrYW1fX3ZfQ0NfMSA9IAorIENDTEQgPSAkKENDKQorLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCistCSQoTERGTEFHUykgLW8gJEAKKytMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKKythbV9fdl9DQ0xEXzEgPSAKKyBTT1VSQ0VTID0gJChEaXNwbGF5VVJMX1NPVVJDRVMpCisgRElTVF9TT1VSQ0VTID0gJChEaXNwbGF5VVJMX1NPVVJDRVMpCisrYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisrICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKKysgICAgbnxub3xOTykgZmFsc2U7OyBcCisrICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisrICBlc2FjCisrYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKysjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisrIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCisrIyAqbm90KiBwcmVzZXJ2ZWQuCisrYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisrICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCisrICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisrJworKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKysjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKysjIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgorK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisrICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKyAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisrICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAorIEVUQUdTID0gZXRhZ3MKKyBDVEFHUyA9IGN0YWdzCisgRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKyBBQ0xPQ0FMID0gQEFDTE9DQUxACisgQUxMT0NBID0gQEFMTE9DQUAKKyBBTVRBUiA9IEBBTVRBUkAKKytBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKKyBBUiA9IEBBUkAKKyBBUyA9IEBBU0AKKyBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0BAIC0xMTQsNiArMjE0LDcgQEAgTE5fUyA9IEBMTl9TQAorIExUTElCT0JKUyA9IEBMVExJQk9CSlNACisgTUFJTlQgPSBATUFJTlRACisgTUFLRUlORk8gPSBATUFLRUlORk9ACisrTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorIE1LRElSX1AgPSBATUtESVJfUEAKKyBOTSA9IEBOTUAKKyBOTUVESVQgPSBATk1FRElUQAorQEAgLTEyNiw2ICsyMjcsNyBAQCBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKyBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorIFBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorIFBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACisrUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyBQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKKyBQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitAQCAtMTQ2LDYgKzI0OCw3IEBAIGFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACisgYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorIGFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKKyBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKKythY19jdF9BUiA9IEBhY19jdF9BUkAKKyBhY19jdF9DQyA9IEBhY19jdF9DQ0AKKyBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK0BAIC0xODAsNyArMjgzLDYgQEAgbGliZGlyID0gQGxpYmRpckAKKyBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKKyBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACistbHRfRUNITyA9IEBsdF9FQ0hPQAorIG1hbmRpciA9IEBtYW5kaXJACisgbWtkaXJfcCA9IEBta2Rpcl9wQAorIG9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK0BAIC0xOTMsNiArMjk1LDcgQEAgc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACisgc3JjZGlyID0gQHNyY2RpckAKKyBzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACisgdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKyt0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACisgdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKKyB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisgQU1fQ0ZMQUdTID0gLUkke3RvcF9zcmNkaXJ9L2luY2x1ZGUKK0BAIC0yMDksMTQgKzMxMiwxNCBAQCAkKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorLQkJJiYgZXhpdCAwOyBcCisrCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisgCSAgICAgIGV4aXQgMTs7IFwKKyAJICBlc2FjOyBcCisgCWRvbmU7IFwKKy0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9EaXNwbGF5VVJML01ha2VmaWxlJzsgXAorLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKKy0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL0Rpc3BsYXlVUkwvTWFrZWZpbGUKKysJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL0Rpc3BsYXlVUkwvTWFrZWZpbGUnOyBcCisrCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKysJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvRGlzcGxheVVSTC9NYWtlZmlsZQorIC5QUkVDSU9VUzogTWFrZWZpbGUKKyBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCUBjYXNlICckPycgaW4gXAorQEAgLTIzNCwxNiArMzM3LDIwIEBAICQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyAkKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisrJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKyAKKyBjbGVhbi1jaGVja1BST0dSQU1TOgorLQlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKy0JICBmPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCistCSAgZWNobyAiIHJtIC1mICQkcCAkJGYiOyBcCistCSAgcm0gLWYgJCRwICQkZiA7IFwKKy0JZG9uZQorLURpc3BsYXlVUkwkKEVYRUVYVCk6ICQoRGlzcGxheVVSTF9PQkpFQ1RTKSAkKERpc3BsYXlVUkxfREVQRU5ERU5DSUVTKSAKKysJQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKysJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKysJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisrCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisrCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKysJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKysJcm0gLWYgJCRsaXN0CisrCisrRGlzcGxheVVSTCQoRVhFRVhUKTogJChEaXNwbGF5VVJMX09CSkVDVFMpICQoRGlzcGxheVVSTF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfRGlzcGxheVVSTF9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgRGlzcGxheVVSTCQoRVhFRVhUKQorLQkkKExJTkspICQoRGlzcGxheVVSTF9PQkpFQ1RTKSAkKERpc3BsYXlVUkxfTERBREQpICQoTElCUykKKysJJChBTV9WX0NDTEQpJChMSU5LKSAkKERpc3BsYXlVUkxfT0JKRUNUUykgJChEaXNwbGF5VVJMX0xEQUREKSAkKExJQlMpCisgCisgbW9zdGx5Y2xlYW4tY29tcGlsZToKKyAJLXJtIC1mICouJChPQkpFWFQpCitAQCAtMjU0LDI1ICszNjEsMjUgQEAgZGlzdGNsZWFuLWNvbXBpbGU6CisgQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL0Rpc3BsYXlVUkwuUG9AYW1fX3F1b3RlQAorIAorIC5jLm86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyAuYy5vYmo6CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorIAorIC5jLmxvOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyAJLXJtIC1mICoubG8KK0BAIC0yODAsNDkgKzM4Nyw1NCBAQCBtb3N0bHljbGVhbi1saWJ0b29sOgorIGNsZWFuLWxpYnRvb2w6CisgCS1ybSAtcmYgLmxpYnMgX2xpYnMKKyAKKy1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtdHB5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlta2lkIC1mSUQgJCR1bmlxdWUKKy10YWdzOiBUQUdTCistCistVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCisrSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCisrdGFnczogdGFncy1hbQorK1RBR1M6IHRhZ3MKKysKKyt0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCXNldCB4OyBcCisgCWhlcmU9YHB3ZGA7IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJc2hpZnQ7IFwKKysJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKyAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCistCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisrCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorKwkgIGVsc2UgXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAkJHVuaXF1ZTsgXAorKwkgIGZpOyBcCisgCWZpCistY3RhZ3M6IENUQUdTCistQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisrY3RhZ3M6IGN0YWdzLWFtCisrCisrQ1RBR1M6IGN0YWdzCisrY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKyAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCistCSAgICAgJCR0YWdzICQkdW5pcXVlCisrCSAgICAgJCR1bmlxdWUKKyAKKyBHVEFHUzoKKyAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKy0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKy0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKysJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisrY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQorKworK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKysJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisrCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAorKwkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCisrCWVzYWM7IFwKKysJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCisrCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorKwkgIGVsc2UgXAorKwkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKKysJICBmaTsgXAorKwlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKKyAKKyBkaXN0Y2xlYW4tdGFnczoKKyAJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKK0BAIC0zNDMsMTMgKzQ1NSwxNyBAQCBkaXN0ZGlyOiAkKERJU1RGSUxFUykKKyAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisgCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKyAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisrCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKysJICAgIGZpOyBcCisgCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKy0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorIAkgICAgZmk7IFwKKy0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKyAJICBlbHNlIFwKKy0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisrCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKyAJICAgIHx8IGV4aXQgMTsgXAorIAkgIGZpOyBcCisgCWRvbmUKK0BAIC0zNjgsMTYgKzQ4NCwyMiBAQCBpbnN0YWxsLWFtOiBhbGwtYW0KKyAKKyBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQorIGluc3RhbGwtc3RyaXA6CistCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCistCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCistCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCistCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICAgaW5zdGFsbDsgXAorKwllbHNlIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorKwlmaQorIG1vc3RseWNsZWFuLWdlbmVyaWM6CisgCisgY2xlYW4tZ2VuZXJpYzoKKyAKKyBkaXN0Y2xlYW4tZ2VuZXJpYzoKKyAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisrCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorIAorIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorQEAgLTM5OSw2ICs1MjEsOCBAQCBkdmktYW06CisgCisgaHRtbDogaHRtbC1hbQorIAorK2h0bWwtYW06CisrCisgaW5mbzogaW5mby1hbQorIAorIGluZm8tYW06CitAQCAtNDA3LDE4ICs1MzEsMjggQEAgaW5zdGFsbC1kYXRhLWFtOgorIAorIGluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorIAorK2luc3RhbGwtZHZpLWFtOgorKworIGluc3RhbGwtZXhlYy1hbToKKyAKKyBpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorIAorK2luc3RhbGwtaHRtbC1hbToKKysKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorK2luc3RhbGwtaW5mby1hbToKKysKKyBpbnN0YWxsLW1hbjoKKyAKKyBpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKyAKKytpbnN0YWxsLXBkZi1hbToKKysKKyBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisgCisraW5zdGFsbC1wcy1hbToKKysKKyBpbnN0YWxsY2hlY2stYW06CisgCisgbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorQEAgLTQ0MSwxMSArNTc1LDExIEBAIHBzLWFtOgorIAorIHVuaW5zdGFsbC1hbToKKyAKKy0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisrLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorIAorLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCistCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIFwKKy0JZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKysuUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCisrCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gXAorKwljdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorIAlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisgCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorIAlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKK0BAIC00NTUsNyArNTg5LDcgQEAgdW5pbnN0YWxsLWFtOgorIAlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorLQl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysJdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKyAKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBjaGVjazoKK0BAIC00NzIsNiArNjA2LDcgQEAgdW5pbnN0YWxsLWFtOgorIAorIEBDRl9CVUlMRF9URVNUU19UUlVFQHZhbGdyaW5kOgorIEBDRl9CVUlMRF9URVNUU19UUlVFQAkke0xJQlRPT0x9IC0tbW9kZSBleGVjdXRlICR7QH0gJHtWQUxHUklOREZMQUdTfSAuL0Rpc3BsYXlVUkwKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL01ha2VmaWxlLmluCitpbmRleCA0OGM2MTBmLi41MTVkYTRlIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUuaW4KKysrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE0LDkgKzE0LDU1IEBACisgCisgQFNFVF9NQUtFQAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zMiwzMyArNzgsMTA0IEBAIFBPU1RfVU5JTlNUQUxMID0gOgorIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgc3ViZGlyID0gZXhhbXBsZXMKKy1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KKytESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBTT1VSQ0VTID0KKyBESVNUX1NPVVJDRVMgPQorLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCistCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorLQlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCistCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCistCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCistCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorLQlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAorKwljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCisrCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKKysJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKKysJaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAorKwlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKKysJaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKKysJdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworIFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisrYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAorKyAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAorKyAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgXAorKyAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCisrQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCisrCWRpc3RkaXIKKythbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQorKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKysjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKysjICpub3QqIHByZXNlcnZlZC4KKythbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKysgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKysgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisrICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKysnCisrIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCisrYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKysgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKysgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCisgRVRBR1MgPSBldGFncworIENUQUdTID0gY3RhZ3MKKyBESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCisgRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKythbV9fcmVsYXRpdml6ZSA9IFwKKysgIGRpcjA9YHB3ZGA7IFwKKysgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKysgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisrICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKysgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKysgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKysgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKysgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisrICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKysgICAgICBlbHNlIFwKKysgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKysgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisrICAgICAgICBlbHNlIFwKKysgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorKyAgICAgICAgZmk7IFwKKysgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisrICAgICAgZmk7IFwKKysgICAgZmk7IFwKKysgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisrICBkb25lOyBcCisrICByZWxkaXI9IiQkZGlyMiIKKyBBQ0xPQ0FMID0gQEFDTE9DQUxACisgQUxMT0NBID0gQEFMTE9DQUAKKyBBTVRBUiA9IEBBTVRBUkAKKytBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKKyBBUiA9IEBBUkAKKyBBUyA9IEBBU0AKKyBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0BAIC0xMDgsNiArMjI1LDcgQEAgTE5fUyA9IEBMTl9TQAorIExUTElCT0JKUyA9IEBMVExJQk9CSlNACisgTUFJTlQgPSBATUFJTlRACisgTUFLRUlORk8gPSBATUFLRUlORk9ACisrTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorIE1LRElSX1AgPSBATUtESVJfUEAKKyBOTSA9IEBOTUAKKyBOTUVESVQgPSBATk1FRElUQAorQEAgLTEyMCw2ICsyMzgsNyBAQCBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKyBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorIFBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorIFBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACisrUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyBQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKKyBQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitAQCAtMTQwLDYgKzI1OSw3IEBAIGFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACisgYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorIGFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKKyBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKKythY19jdF9BUiA9IEBhY19jdF9BUkAKKyBhY19jdF9DQyA9IEBhY19jdF9DQ0AKKyBhY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK0BAIC0xNzQsNyArMjk0LDYgQEAgbGliZGlyID0gQGxpYmRpckAKKyBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKKyBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACistbHRfRUNITyA9IEBsdF9FQ0hPQAorIG1hbmRpciA9IEBtYW5kaXJACisgbWtkaXJfcCA9IEBta2Rpcl9wQAorIG9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK0BAIC0xODcsNiArMzA2LDcgQEAgc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACisgc3JjZGlyID0gQHNyY2RpckAKKyBzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACisgdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKyt0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACisgdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKKyB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisgU1VCRElSUyA9IFJlYWRQTGlzdEV4YW1wbGUJXAorQEAgLTIwOCwxNCArMzI4LDE0IEBAICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpCisgCUBmb3IgZGVwIGluICQ/OyBkbyBcCisgCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisgCSAgICAqJCRkZXAqKSBcCistCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCistCQkmJiBleGl0IDA7IFwKKysJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisrCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKyAJICAgICAgZXhpdCAxOzsgXAorIAkgIGVzYWM7IFwKKyAJZG9uZTsgXAorLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL01ha2VmaWxlJzsgXAorLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKKy0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9NYWtlZmlsZSc7IFwKKysJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9NYWtlZmlsZQorIC5QUkVDSU9VUzogTWFrZWZpbGUKKyBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCUBjYXNlICckPycgaW4gXAorQEAgLTIzMyw2ICszNTMsNyBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisgCisgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyAJLXJtIC1mICoubG8KK0BAIC0yNDEsMjIgKzM2MiwyNSBAQCBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisgCisgIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKy0jIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKy0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCistIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCistIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKy0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorLSQoUkVDVVJTSVZFX1RBUkdFVFMpOgorLQlAZmFpbGNvbT0nZXhpdCAxJzsgXAorLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCistCSAgY2FzZSAkJGYgaW4gXAorLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCistCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKy0JICBlc2FjOyBcCistCWRvbmU7IFwKKysjIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKysjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mICdtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisrIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCisrIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKKysjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgorKyQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKKysJQGZhaWw9OyBcCisrCWlmICQoYW1fX21ha2Vfa2VlcGdvaW5nKTsgdGhlbiBcCisrCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCisrCWVsc2UgXAorKwkgIGZhaWxjb209J2V4aXQgMSc7IFwKKysJZmk7IFwKKyAJZG90X3NlZW49bm87IFwKKyAJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKysJY2FzZSAiJEAiIGluIFwKKysJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisrCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorKwllc2FjOyBcCisrCWZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisgCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisgCSAgICBkb3Rfc2Vlbj15ZXM7IFwKK0BAIC0yNjQsNjUgKzM4OCwyMCBAQCAkKFJFQ1VSU0lWRV9UQVJHRVRTKToKKyAJICBlbHNlIFwKKyAJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisgCSAgZmk7IFwKKy0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKysJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisgCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKyAJZG9uZTsgXAorIAlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorIAkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisgCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisgCistJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CistCUBmYWlsY29tPSdleGl0IDEnOyBcCistCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKy0JICBjYXNlICQkZiBpbiBcCistCSAgICAqPSogfCAtLVsha10qKTs7IFwKKy0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorLQkgIGVzYWM7IFwKKy0JZG9uZTsgXAorLQlkb3Rfc2Vlbj1ubzsgXAorLQljYXNlICIkQCIgaW4gXAorLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKy0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCistCWVzYWM7IFwKKy0JcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKy0JICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCistCSAgZmk7IFwKKy0JZG9uZTsgXAorLQlyZXY9IiQkcmV2IC4iOyBcCistCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKy0JZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKy0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKy0JICBlbHNlIFwKKy0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCistCSAgZmk7IFwKKy0JICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKy0JICB8fCBldmFsICQkZmFpbGNvbTsgXAorLQlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKKy10YWdzLXJlY3Vyc2l2ZToKKy0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCistCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKy0JZG9uZQorLWN0YWdzLXJlY3Vyc2l2ZToKKy0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCistCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCistCWRvbmUKKytJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKKyt0YWdzOiB0YWdzLXJlY3Vyc2l2ZQorK1RBR1M6IHRhZ3MKKyAKKy1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtdHB5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlta2lkIC1mSUQgJCR1bmlxdWUKKy10YWdzOiBUQUdTCistCistVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKyt0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCXNldCB4OyBcCisgCWhlcmU9YHB3ZGA7IFwKKyAJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisgCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCitAQCAtMzM0LDM4ICs0MTMsNDkgQEAgVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisgCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisgCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCistCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisgCSAgZmk7IFwKKyAJZG9uZTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwlzaGlmdDsgXAorKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKy0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCistCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKysJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICQkdW5pcXVlOyBcCisrCSAgZmk7IFwKKyAJZmkKKy1jdGFnczogQ1RBR1MKKy1DVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKytjdGFnczogY3RhZ3MtcmVjdXJzaXZlCisrCisrQ1RBR1M6IGN0YWdzCisrY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKyAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCistCSAgICAgJCR0YWdzICQkdW5pcXVlCisrCSAgICAgJCR1bmlxdWUKKyAKKyBHVEFHUzoKKyAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKy0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKy0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKysJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisrY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitAQCAtMzg2LDI5ICs0NzYsNDEgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCistCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisrCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorIAkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCistCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCistCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCistCSAgICB8fCBleGl0IDE7IFwKKy0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKy0JICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorLQkgICAgKGNkICQkc3ViZGlyICYmIFwKKysJICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCisrCSAgICAgIHx8IHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKysJICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorKwkgICAgICB8fCBleGl0IDE7IFwKKysJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisrCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKysJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKysJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisgCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKy0JICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorLQkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKyAJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKyAJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKysJCWFtX19za2lwX21vZGVfZml4PTogXAorIAkgICAgICAgIGRpc3RkaXIpIFwKKyAJICAgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKK0BAIC00MjgsMTYgKzUzMCwyMiBAQCBpbnN0YWxsLWFtOiBhbGwtYW0KKyAKKyBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKKyBpbnN0YWxsLXN0cmlwOgorLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKysJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAgIGluc3RhbGw7IFwKKysJZWxzZSBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKysJZmkKKyBtb3N0bHljbGVhbi1nZW5lcmljOgorIAorIGNsZWFuLWdlbmVyaWM6CisgCisgZGlzdGNsZWFuLWdlbmVyaWM6CisgCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKyAKKyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKK0BAIC00NTYsNiArNTY0LDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtcmVjdXJzaXZlCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorIAorIGluZm8tYW06CitAQCAtNDY0LDE4ICs1NzQsMjggQEAgaW5zdGFsbC1kYXRhLWFtOgorIAorIGluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisgCisraW5zdGFsbC1odG1sLWFtOgorKworIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorIAorK2luc3RhbGwtaW5mby1hbToKKysKKyBpbnN0YWxsLW1hbjoKKyAKKyBpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKyAKKytpbnN0YWxsLXBzLWFtOgorKworIGluc3RhbGxjaGVjay1hbToKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQEAgLTQ5NiwyMiArNjE2LDIxIEBAIHBzLWFtOgorIAorIHVuaW5zdGFsbC1hbToKKyAKKy0uTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCistCWluc3RhbGwtc3RyaXAKKy0KKy0uUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKy0JYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorLQljdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKy0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKy0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCistCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCistCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCistCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCistCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKy0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorLQltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCistCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysuTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorKworKy5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCisrCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKKysJY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKysJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisrCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKysJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorKwlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisrCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKKysJcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysKKyAKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL1JlYWRQTGlzdEV4YW1wbGUvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9SZWFkUExpc3RFeGFtcGxlL01ha2VmaWxlLmluCitpbmRleCBlMjA1NmQ4Li5iZDk0NDhmIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvUmVhZFBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvUmVhZFBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgorQEAgLTEsOCArMSw4IEBACistIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMC4xIGZyb20gTWFrZWZpbGUuYW0uCisrIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNC4xIGZyb20gTWFrZWZpbGUuYW0uCisgIyBAY29uZmlndXJlX2lucHV0QAorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorLSMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKyAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK0BAIC0xNCw5ICsxNCw1NSBAQAorIAorIEBTRVRfTUFLRUAKKyBWUEFUSCA9IEBzcmNkaXJACisrYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisrICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisrICAgICAgPykgOzsgXAorKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisrICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorKyAgICAgICAgIGV4aXQgMTs7IFwKKysgIGVzYWM7IFwKKysgIGhhc19vcHQ9bm87IFwKKysgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisrICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorKyAgZWxzZSBcCisrICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorKyAgICAgICpcXFtcIFwJXSopIFwKKysgICAgICAgIGJzPVxcOyBcCisrICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKysgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisrICAgIGVzYWM7IFwKKysgIGZpOyBcCisrICBza2lwX25leHQ9bm87IFwKKysgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKysgIHsgXAorKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorKyAgfTsgXAorKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisrICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKysgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisrICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgIGVzYWM7IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKysgICAgZXNhYzsgXAorKyAgZG9uZTsgXAorKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKKythbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACistcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKKyBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCisgaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKKyBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitAQCAtMzMsMzggKzc5LDkyIEBAIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2tfUFJPR1JBTVMgPSBSZWFkUExpc3RFeGFtcGxlJChFWEVFWFQpCisgc3ViZGlyID0gZXhhbXBsZXMvUmVhZFBMaXN0RXhhbXBsZQorLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMgXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9kZXBjb21wCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisgYW1fUmVhZFBMaXN0RXhhbXBsZV9PQkpFQ1RTID0gUmVhZFBMaXN0RXhhbXBsZS4kKE9CSkVYVCkKKyBSZWFkUExpc3RFeGFtcGxlX09CSkVDVFMgPSAkKGFtX1JlYWRQTGlzdEV4YW1wbGVfT0JKRUNUUykKKyBSZWFkUExpc3RFeGFtcGxlX0RFUEVOREVOQ0lFUyA9ICR7dG9wX2J1aWxkZGlyfS9saWJDb3JlRm91bmRhdGlvbi5sYQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisgCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCistTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpIFwKKysJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisrCSQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCisrQU1fVl9DWFggPSAkKGFtX192X0NYWF9AQU1fVkApCisrYW1fX3ZfQ1hYXyA9ICQoYW1fX3ZfQ1hYX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NYWF8wID0gQGVjaG8gIiAgQ1hYICAgICAiICRAOworK2FtX192X0NYWF8xID0gCisgQ1hYTEQgPSAkKENYWCkKKy1DWFhMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorLQkkKExERkxBR1MpIC1vICRACisrQ1hYTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpIFwKKysJJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisrQU1fVl9DWFhMRCA9ICQoYW1fX3ZfQ1hYTERfQEFNX1ZAKQorK2FtX192X0NYWExEXyA9ICQoYW1fX3ZfQ1hYTERfQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfQ1hYTERfMCA9IEBlY2hvICIgIENYWExEICAgIiAkQDsKKythbV9fdl9DWFhMRF8xID0gCisgU09VUkNFUyA9ICQoUmVhZFBMaXN0RXhhbXBsZV9TT1VSQ0VTKQorIERJU1RfU09VUkNFUyA9ICQoUmVhZFBMaXN0RXhhbXBsZV9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTE0LDYgKzIxNCw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMjYsNiArMjI3LDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE0Niw2ICsyNDgsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTgwLDcgKzI4Myw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMTkzLDYgKzI5NSw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIEFNX0NYWEZMQUdTID0gLUkke3RvcF9zcmNkaXJ9L2luY2x1ZGUKK0BAIC0yMDksMTQgKzMxMiwxNCBAQCAkKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorLQkJJiYgZXhpdCAwOyBcCisrCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisgCSAgICAgIGV4aXQgMTs7IFwKKyAJICBlc2FjOyBcCisgCWRvbmU7IFwKKy0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9SZWFkUExpc3RFeGFtcGxlL01ha2VmaWxlJzsgXAorLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKKy0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL1JlYWRQTGlzdEV4YW1wbGUvTWFrZWZpbGUKKysJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL1JlYWRQTGlzdEV4YW1wbGUvTWFrZWZpbGUnOyBcCisrCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKysJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvUmVhZFBMaXN0RXhhbXBsZS9NYWtlZmlsZQorIC5QUkVDSU9VUzogTWFrZWZpbGUKKyBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCUBjYXNlICckPycgaW4gXAorQEAgLTIzNCwxNiArMzM3LDIwIEBAICQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyAkKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisrJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKyAKKyBjbGVhbi1jaGVja1BST0dSQU1TOgorLQlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKy0JICBmPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCistCSAgZWNobyAiIHJtIC1mICQkcCAkJGYiOyBcCistCSAgcm0gLWYgJCRwICQkZiA7IFwKKy0JZG9uZQorLVJlYWRQTGlzdEV4YW1wbGUkKEVYRUVYVCk6ICQoUmVhZFBMaXN0RXhhbXBsZV9PQkpFQ1RTKSAkKFJlYWRQTGlzdEV4YW1wbGVfREVQRU5ERU5DSUVTKSAKKysJQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKysJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKysJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisrCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisrCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKysJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKysJcm0gLWYgJCRsaXN0CisrCisrUmVhZFBMaXN0RXhhbXBsZSQoRVhFRVhUKTogJChSZWFkUExpc3RFeGFtcGxlX09CSkVDVFMpICQoUmVhZFBMaXN0RXhhbXBsZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfUmVhZFBMaXN0RXhhbXBsZV9ERVBFTkRFTkNJRVMpIAorIAlAcm0gLWYgUmVhZFBMaXN0RXhhbXBsZSQoRVhFRVhUKQorLQkkKENYWExJTkspICQoUmVhZFBMaXN0RXhhbXBsZV9PQkpFQ1RTKSAkKFJlYWRQTGlzdEV4YW1wbGVfTERBREQpICQoTElCUykKKysJJChBTV9WX0NYWExEKSQoQ1hYTElOSykgJChSZWFkUExpc3RFeGFtcGxlX09CSkVDVFMpICQoUmVhZFBMaXN0RXhhbXBsZV9MREFERCkgJChMSUJTKQorIAorIG1vc3RseWNsZWFuLWNvbXBpbGU6CisgCS1ybSAtZiAqLiQoT0JKRVhUKQorQEAgLTI1NCwyNSArMzYxLDI1IEBAIGRpc3RjbGVhbi1jb21waWxlOgorIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9SZWFkUExpc3RFeGFtcGxlLlBvQGFtX19xdW90ZUAKKyAKKyAuY3BwLm86CistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgLmNwcC5vYmo6CistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKyAKKyAuY3BwLmxvOgorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChMVENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgCS1ybSAtZiAqLmxvCitAQCAtMjgwLDQ5ICszODcsNTQgQEAgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisgCistSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXRweSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JbWtpZCAtZklEICQkdW5pcXVlCistdGFnczogVEFHUworLQorLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQorK3RhZ3M6IHRhZ3MtYW0KKytUQUdTOiB0YWdzCisrCisrdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlzZXQgeDsgXAorIAloZXJlPWBwd2RgOyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXNoaWZ0OyBcCisrCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisgCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKysJICBlbHNlIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgJCR1bmlxdWU7IFwKKysJICBmaTsgXAorIAlmaQorLWN0YWdzOiBDVEFHUworLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorK2N0YWdzOiBjdGFncy1hbQorKworK0NUQUdTOiBjdGFncworK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisgCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorKwkgICAgICQkdW5pcXVlCisgCisgR1RBR1M6CisgCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCistCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKysJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisrCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitAQCAtMzQzLDEzICs0NTUsMTcgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCitAQCAtMzY4LDE2ICs0ODQsMjIgQEAgaW5zdGFsbC1hbTogYWxsLWFtCisgCisgaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KKyBpbnN0YWxsLXN0cmlwOgorLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKysJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAgIGluc3RhbGw7IFwKKysJZWxzZSBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKysJZmkKKyBtb3N0bHljbGVhbi1nZW5lcmljOgorIAorIGNsZWFuLWdlbmVyaWM6CisgCisgZGlzdGNsZWFuLWdlbmVyaWM6CisgCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKyAKKyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKK0BAIC0zOTksNiArNTIxLDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtYW0KKyAKKytodG1sLWFtOgorKworIGluZm86IGluZm8tYW0KKyAKKyBpbmZvLWFtOgorQEAgLTQwNywxOCArNTMxLDI4IEBAIGluc3RhbGwtZGF0YS1hbToKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00NDEsMTEgKzU3NSwxMSBAQCBwcy1hbToKKyAKKyB1bmluc3RhbGwtYW06CisgCistLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKyAKKy0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBcCistCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisrLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorKwljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIFwKKysJY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKyAJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorIAlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKyAJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCitAQCAtNDU1LDcgKzU4OSw3IEBAIHVuaW5zdGFsbC1hbToKKyAJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorIAltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisgCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisgCisgCisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2s6CitAQCAtNDY2LDYgKzYwMCw3IEBAIHVuaW5zdGFsbC1hbToKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUB2YWxncmluZDoKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUAJJHtMSUJUT09MfSAtLW1vZGUgZXhlY3V0ZSAke0B9ICR7VkFMR1JJTkRGTEFHU30gLi9SZWFkUExpc3RFeGFtcGxlCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyL01ha2VmaWxlLmluIGIvZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyL01ha2VmaWxlLmluCitpbmRleCBlMTY4NjczLi4wODJhODJiIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9TaW1wbGVXZWJTZXJ2ZXIvTWFrZWZpbGUuaW4KK0BAIC0xLDggKzEsOCBAQAorLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAuMSBmcm9tIE1ha2VmaWxlLmFtLgorKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTQuMSBmcm9tIE1ha2VmaWxlLmFtLgorICMgQGNvbmZpZ3VyZV9pbnB1dEAKKyAKKy0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKy0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisgIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitAQCAtMTQsOSArMTQsNTUgQEAKKyAKKyBAU0VUX01BS0VACisgVlBBVEggPSBAc3JjZGlyQAorK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKKythbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorKyAgICAgID8pIDs7IFwKKysgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKysgICAgICAgICBleGl0IDE7OyBcCisrICBlc2FjOyBcCisrICBoYXNfb3B0PW5vOyBcCisrICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKysgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKysgIGVsc2UgXAorKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKysgICAgICAqXFxbXCBcCV0qKSBcCisrICAgICAgICBicz1cXDsgXAorKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisrICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAorKyAgICBlc2FjOyBcCisrICBmaTsgXAorKyAgc2tpcF9uZXh0PW5vOyBcCisrICBzdHJpcF90cmFpbG9wdCAoKSBcCisrICB7IFwKKysgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKysgIH07IFwKKysgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKysgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisrICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKysgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICBlc2FjOyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisrICAgIGVzYWM7IFwKKysgIGRvbmU7IFwKKysgIHRlc3QgJCRoYXNfb3B0ID0geWVzCisrYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKythbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKyBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisrcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACisgYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CisgaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworQEAgLTMzLDM4ICs3OSw5MiBAQCBidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAorIGhvc3RfdHJpcGxldCA9IEBob3N0QAorIEBDRl9CVUlMRF9URVNUU19UUlVFQEVYVFJBX1BST0dSQU1TID0gU2ltcGxlV2ViU2VydmVyJChFWEVFWFQpCisgc3ViZGlyID0gZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyCistRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCisrRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycyBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisgYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWNpbmNsdWRlLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKysJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisgCSQoQUNMT0NBTF9NNCkKKyBta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycworIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jb25maWcuaAorIENPTkZJR19DTEVBTl9GSUxFUyA9CisrQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KKyBhbV9TaW1wbGVXZWJTZXJ2ZXJfT0JKRUNUUyA9IFNpbXBsZVdlYlNlcnZlci4kKE9CSkVYVCkKKyBTaW1wbGVXZWJTZXJ2ZXJfT0JKRUNUUyA9ICQoYW1fU2ltcGxlV2ViU2VydmVyX09CSkVDVFMpCisgU2ltcGxlV2ViU2VydmVyX0RFUEVOREVOQ0lFUyA9ICR7dG9wX2J1aWxkZGlyfS9saWJDb3JlRm91bmRhdGlvbi5sYQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKyAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKysJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKKythbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CisrYW1fX3ZfQ0NfMSA9IAorIENDTEQgPSAkKENDKQorLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCistCSQoTERGTEFHUykgLW8gJEAKKytMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKKythbV9fdl9DQ0xEXzEgPSAKKyBTT1VSQ0VTID0gJChTaW1wbGVXZWJTZXJ2ZXJfU09VUkNFUykKKyBESVNUX1NPVVJDRVMgPSAkKFNpbXBsZVdlYlNlcnZlcl9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTE0LDYgKzIxNCw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMjYsNiArMjI3LDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE0Niw2ICsyNDgsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTgwLDcgKzI4Myw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMTkzLDYgKzI5NSw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIFNpbXBsZVdlYlNlcnZlcl9MREFERCA9ICR7dG9wX2J1aWxkZGlyfS9saWJDb3JlRm91bmRhdGlvbi5sYQorQEAgLTIwNSwxNCArMzA4LDE0IEBAICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpCisgCUBmb3IgZGVwIGluICQ/OyBkbyBcCisgCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisgCSAgICAqJCRkZXAqKSBcCistCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCistCQkmJiBleGl0IDA7IFwKKysJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisrCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKyAJICAgICAgZXhpdCAxOzsgXAorIAkgIGVzYWM7IFwKKyAJZG9uZTsgXAorLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGV4YW1wbGVzL1NpbXBsZVdlYlNlcnZlci9NYWtlZmlsZSc7IFwKKy0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCistCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9TaW1wbGVXZWJTZXJ2ZXIvTWFrZWZpbGUKKysJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL1NpbXBsZVdlYlNlcnZlci9NYWtlZmlsZSc7IFwKKysJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9TaW1wbGVXZWJTZXJ2ZXIvTWFrZWZpbGUKKyAuUFJFQ0lPVVM6IE1ha2VmaWxlCisgTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAlAY2FzZSAnJD8nIGluIFwKK0BAIC0yMzAsOSArMzMzLDExIEBAICQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyAkKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCistU2ltcGxlV2ViU2VydmVyJChFWEVFWFQpOiAkKFNpbXBsZVdlYlNlcnZlcl9PQkpFQ1RTKSAkKFNpbXBsZVdlYlNlcnZlcl9ERVBFTkRFTkNJRVMpIAorKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisrCisrU2ltcGxlV2ViU2VydmVyJChFWEVFWFQpOiAkKFNpbXBsZVdlYlNlcnZlcl9PQkpFQ1RTKSAkKFNpbXBsZVdlYlNlcnZlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfU2ltcGxlV2ViU2VydmVyX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBTaW1wbGVXZWJTZXJ2ZXIkKEVYRUVYVCkKKy0JJChMSU5LKSAkKFNpbXBsZVdlYlNlcnZlcl9PQkpFQ1RTKSAkKFNpbXBsZVdlYlNlcnZlcl9MREFERCkgJChMSUJTKQorKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoU2ltcGxlV2ViU2VydmVyX09CSkVDVFMpICQoU2ltcGxlV2ViU2VydmVyX0xEQUREKSAkKExJQlMpCisgCisgbW9zdGx5Y2xlYW4tY29tcGlsZToKKyAJLXJtIC1mICouJChPQkpFWFQpCitAQCAtMjQzLDI1ICszNDgsMjUgQEAgZGlzdGNsZWFuLWNvbXBpbGU6CisgQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL1NpbXBsZVdlYlNlcnZlci5Qb0BhbV9fcXVvdGVACisgCisgLmMubzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIC5jLm9iajoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisgQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisgCisgLmMubG86CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CistQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyBtb3N0bHljbGVhbi1saWJ0b29sOgorIAktcm0gLWYgKi5sbworQEAgLTI2OSw0OSArMzc0LDU0IEBAIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgY2xlYW4tbGlidG9vbDoKKyAJLXJtIC1yZiAubGlicyBfbGlicworIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKytJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKKyt0YWdzOiB0YWdzLWFtCisrVEFHUzogdGFncworKworK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJc2V0IHg7IFwKKyAJaGVyZT1gcHdkYDsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwlzaGlmdDsgXAorKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKy0JICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCistCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKysJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisrCSAgZWxzZSBcCisrCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisrCSAgICAgICQkdW5pcXVlOyBcCisrCSAgZmk7IFwKKyAJZmkKKy1jdGFnczogQ1RBR1MKKy1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKytjdGFnczogY3RhZ3MtYW0KKysKKytDVEFHUzogY3RhZ3MKKytjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKy0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKysJICAgICAkJHVuaXF1ZQorIAorIEdUQUdTOgorIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAorLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisrCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKytjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisrCisrY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKwljYXNlICIkKHNyY2RpcikiIGluIFwKKysJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisrCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKysJZXNhYzsgXAorKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKysJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisrCSAgZWxzZSBcCisrCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorKwkgIGZpOyBcCisrCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworIAorIGRpc3RjbGVhbi10YWdzOgorIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworQEAgLTMzMiwxMyArNDQyLDE3IEBAIGRpc3RkaXI6ICQoRElTVEZJTEVTKQorIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKyAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorIAkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKysJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorKwkgICAgZmk7IFwKKyAJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisgCSAgICBmaTsgXAorLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorIAkgIGVsc2UgXAorLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCistCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKysJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisrCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorIAkgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKKyAJZG9uZQorQEAgLTM1NiwxNiArNDcwLDIyIEBAIGluc3RhbGwtYW06IGFsbC1hbQorIAorIGluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCisgaW5zdGFsbC1zdHJpcDoKKy0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKy0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKy0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisrCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgICBpbnN0YWxsOyBcCisrCWVsc2UgXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisrCWZpCisgbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyAKKyBjbGVhbi1nZW5lcmljOgorIAorIGRpc3RjbGVhbi1nZW5lcmljOgorIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisgCisgbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCitAQCAtMzg2LDYgKzUwNiw4IEBAIGR2aS1hbToKKyAKKyBodG1sOiBodG1sLWFtCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLWFtCisgCisgaW5mby1hbToKK0BAIC0zOTQsMTggKzUxNiwyOCBAQCBpbnN0YWxsLWRhdGEtYW06CisgCisgaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisgCisraW5zdGFsbC1kdmktYW06CisrCisgaW5zdGFsbC1leGVjLWFtOgorIAorIGluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisgCisraW5zdGFsbC1odG1sLWFtOgorKworIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisgCisraW5zdGFsbC1pbmZvLWFtOgorKworIGluc3RhbGwtbWFuOgorIAorIGluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorIAorK2luc3RhbGwtcGRmLWFtOgorKworIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKyAKKytpbnN0YWxsLXBzLWFtOgorKworIGluc3RhbGxjaGVjay1hbToKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCitAQCAtNDMwLDE4ICs1NjIsMTkgQEAgdW5pbnN0YWxsLWFtOgorIAorIC5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKyAKKy0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCistCWNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKy0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAorLQlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKy0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKy0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCistCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKy0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKy0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCistCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorKy5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorKwljbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIFwKKysJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisrCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKysJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisrCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisrCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisrCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKysJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrCisgCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KK2RpZmYgLS1naXQgYS9leGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlLmluIGIvZXhhbXBsZXMvU3RyaW5nRXhhbXBsZS9NYWtlZmlsZS5pbgoraW5kZXggMzMwYjkzYS4uMzU5OTc0NyAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL1N0cmluZ0V4YW1wbGUvTWFrZWZpbGUuaW4KKysrKyBiL2V4YW1wbGVzL1N0cmluZ0V4YW1wbGUvTWFrZWZpbGUuaW4KK0BAIC0xLDggKzEsOCBAQAorLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAuMSBmcm9tIE1ha2VmaWxlLmFtLgorKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTQuMSBmcm9tIE1ha2VmaWxlLmFtLgorICMgQGNvbmZpZ3VyZV9pbnB1dEAKKyAKKy0jIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKy0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisgIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitAQCAtMTQsOSArMTQsNTUgQEAKKyAKKyBAU0VUX01BS0VACisgVlBBVEggPSBAc3JjZGlyQAorK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKKythbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorKyAgICAgID8pIDs7IFwKKysgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKysgICAgICAgICBleGl0IDE7OyBcCisrICBlc2FjOyBcCisrICBoYXNfb3B0PW5vOyBcCisrICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKysgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKysgIGVsc2UgXAorKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKysgICAgICAqXFxbXCBcCV0qKSBcCisrICAgICAgICBicz1cXDsgXAorKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisrICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAorKyAgICBlc2FjOyBcCisrICBmaTsgXAorKyAgc2tpcF9uZXh0PW5vOyBcCisrICBzdHJpcF90cmFpbG9wdCAoKSBcCisrICB7IFwKKysgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKysgIH07IFwKKysgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKysgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisrICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKysgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorKyAgICBlc2FjOyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisrICAgIGVzYWM7IFwKKysgIGRvbmU7IFwKKysgIHRlc3QgJCRoYXNfb3B0ID0geWVzCisrYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKythbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKyBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisrcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACisgYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CisgaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworQEAgLTMzLDM4ICs3OSw5MiBAQCBidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAorIGhvc3RfdHJpcGxldCA9IEBob3N0QAorIEBDRl9CVUlMRF9URVNUU19UUlVFQGNoZWNrX1BST0dSQU1TID0gU3RyaW5nRXhhbXBsZSQoRVhFRVhUKQorIHN1YmRpciA9IGV4YW1wbGVzL1N0cmluZ0V4YW1wbGUKKy1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KKytESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKKyBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hY2luY2x1ZGUubTQgXAorLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorKwkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAorKwkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisgYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKyAJJChBQ0xPQ0FMX000KQorIG1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzCisgQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2NvbmZpZy5oCisgQ09ORklHX0NMRUFOX0ZJTEVTID0KKytDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorIGFtX1N0cmluZ0V4YW1wbGVfT0JKRUNUUyA9IFN0cmluZ0V4YW1wbGUuJChPQkpFWFQpCisgU3RyaW5nRXhhbXBsZV9PQkpFQ1RTID0gJChhbV9TdHJpbmdFeGFtcGxlX09CSkVDVFMpCisgU3RyaW5nRXhhbXBsZV9ERVBFTkRFTkNJRVMgPSAke3RvcF9idWlsZGRpcn0vbGliQ29yZUZvdW5kYXRpb24ubGEKKytBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCisrYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9sdF8wID0gLS1zaWxlbnQKKythbV9fdl9sdF8xID0gCisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlCisgZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworK2FtX19tdiA9IG12IC1mCisgQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisgCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKy1MVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCisrTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKysJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisrCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCisrYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworK2FtX192X0NDXzEgPSAKKyBDQ0xEID0gJChDQykKKy1MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKy0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorLQkkKExERkxBR1MpIC1vICRACisrTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKysJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisrQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKKythbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CisrYW1fX3ZfQ0NMRF8xID0gCisgU09VUkNFUyA9ICQoU3RyaW5nRXhhbXBsZV9TT1VSQ0VTKQorIERJU1RfU09VUkNFUyA9ICQoU3RyaW5nRXhhbXBsZV9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTE0LDYgKzIxNCw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMjYsNiArMjI3LDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE0Niw2ICsyNDgsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTgwLDcgKzI4Myw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMTkzLDYgKzI5NSw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIEFNX0NGTEFHUyA9IC1JJHt0b3Bfc3JjZGlyfS9pbmNsdWRlCitAQCAtMjA3LDE0ICszMTAsMTQgQEAgJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmkKKyAJQGZvciBkZXAgaW4gJD87IGRvIFwKKyAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKyAJICAgICokJGRlcCopIFwKKy0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKy0JCSYmIGV4aXQgMDsgXAorKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKysJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorIAkgICAgICBleGl0IDE7OyBcCisgCSAgZXNhYzsgXAorIAlkb25lOyBcCistCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZXhhbXBsZXMvU3RyaW5nRXhhbXBsZS9NYWtlZmlsZSc7IFwKKy0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCistCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlCisrCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlJzsgXAorKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisrCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV4YW1wbGVzL1N0cmluZ0V4YW1wbGUvTWFrZWZpbGUKKyAuUFJFQ0lPVVM6IE1ha2VmaWxlCisgTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAlAY2FzZSAnJD8nIGluIFwKK0BAIC0yMzIsMTYgKzMzNSwyMCBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisgCisgY2xlYW4tY2hlY2tQUk9HUkFNUzoKKy0JQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCistCSAgZj1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorLQkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorLQkgIHJtIC1mICQkcCAkJGYgOyBcCistCWRvbmUKKy1TdHJpbmdFeGFtcGxlJChFWEVFWFQpOiAkKFN0cmluZ0V4YW1wbGVfT0JKRUNUUykgJChTdHJpbmdFeGFtcGxlX0RFUEVOREVOQ0lFUykgCisrCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisrCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisrCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisrCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisrCXJtIC1mICQkbGlzdAorKworK1N0cmluZ0V4YW1wbGUkKEVYRUVYVCk6ICQoU3RyaW5nRXhhbXBsZV9PQkpFQ1RTKSAkKFN0cmluZ0V4YW1wbGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX1N0cmluZ0V4YW1wbGVfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIFN0cmluZ0V4YW1wbGUkKEVYRUVYVCkKKy0JJChMSU5LKSAkKFN0cmluZ0V4YW1wbGVfT0JKRUNUUykgJChTdHJpbmdFeGFtcGxlX0xEQUREKSAkKExJQlMpCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgJChTdHJpbmdFeGFtcGxlX09CSkVDVFMpICQoU3RyaW5nRXhhbXBsZV9MREFERCkgJChMSUJTKQorIAorIG1vc3RseWNsZWFuLWNvbXBpbGU6CisgCS1ybSAtZiAqLiQoT0JKRVhUKQorQEAgLTI1MiwyNSArMzU5LDI1IEBAIGRpc3RjbGVhbi1jb21waWxlOgorIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9TdHJpbmdFeGFtcGxlLlBvQGFtX19xdW90ZUAKKyAKKyAuYy5vOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgLmMub2JqOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKyAKKyAuYy5sbzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgCS1ybSAtZiAqLmxvCitAQCAtMjc4LDQ5ICszODUsNTQgQEAgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisgCistSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXRweSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JbWtpZCAtZklEICQkdW5pcXVlCistdGFnczogVEFHUworLQorLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQorK3RhZ3M6IHRhZ3MtYW0KKytUQUdTOiB0YWdzCisrCisrdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlzZXQgeDsgXAorIAloZXJlPWBwd2RgOyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXNoaWZ0OyBcCisrCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisgCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKysJICBlbHNlIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgJCR1bmlxdWU7IFwKKysJICBmaTsgXAorIAlmaQorLWN0YWdzOiBDVEFHUworLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorK2N0YWdzOiBjdGFncy1hbQorKworK0NUQUdTOiBjdGFncworK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisgCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorKwkgICAgICQkdW5pcXVlCisgCisgR1RBR1M6CisgCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCistCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKysJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisrCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitAQCAtMzQxLDEzICs0NTMsMTcgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCitAQCAtMzY2LDE2ICs0ODIsMjIgQEAgaW5zdGFsbC1hbTogYWxsLWFtCisgCisgaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KKyBpbnN0YWxsLXN0cmlwOgorLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKysJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAgIGluc3RhbGw7IFwKKysJZWxzZSBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKysJZmkKKyBtb3N0bHljbGVhbi1nZW5lcmljOgorIAorIGNsZWFuLWdlbmVyaWM6CisgCisgZGlzdGNsZWFuLWdlbmVyaWM6CisgCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKyAKKyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKK0BAIC0zOTcsNiArNTE5LDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtYW0KKyAKKytodG1sLWFtOgorKworIGluZm86IGluZm8tYW0KKyAKKyBpbmZvLWFtOgorQEAgLTQwNSwxOCArNTI5LDI4IEBAIGluc3RhbGwtZGF0YS1hbToKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00MzksMTEgKzU3MywxMSBAQCBwcy1hbToKKyAKKyB1bmluc3RhbGwtYW06CisgCistLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKyAKKy0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBcCistCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisrLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorKwljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIFwKKysJY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKyAJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorIAlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKyAJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCitAQCAtNDUzLDcgKzU4Nyw3IEBAIHVuaW5zdGFsbC1hbToKKyAJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorIAltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisgCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisgCisgCisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2s6CitAQCAtNDY0LDYgKzU5OCw3IEBAIHVuaW5zdGFsbC1hbToKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUB2YWxncmluZDoKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUAJJHtMSUJUT09MfSAtLW1vZGUgZXhlY3V0ZSAke0B9ICR7VkFMR1JJTkRGTEFHU30gLi9TdHJpbmdFeGFtcGxlCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvV3JpdGVQTGlzdEV4YW1wbGUvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgoraW5kZXggZTRkODJkMy4uYjM3ODhjNCAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL1dyaXRlUExpc3RFeGFtcGxlL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgorQEAgLTEsOCArMSw4IEBACistIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMC4xIGZyb20gTWFrZWZpbGUuYW0uCisrIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNC4xIGZyb20gTWFrZWZpbGUuYW0uCisgIyBAY29uZmlndXJlX2lucHV0QAorIAorLSMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorLSMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKyAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK0BAIC0xNCw5ICsxNCw1NSBAQAorIAorIEBTRVRfTUFLRUAKKyBWUEFUSCA9IEBzcmNkaXJACisrYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisrICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisrICAgICAgPykgOzsgXAorKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisrICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorKyAgICAgICAgIGV4aXQgMTs7IFwKKysgIGVzYWM7IFwKKysgIGhhc19vcHQ9bm87IFwKKysgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisrICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorKyAgZWxzZSBcCisrICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAorKyAgICAgICpcXFtcIFwJXSopIFwKKysgICAgICAgIGJzPVxcOyBcCisrICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKysgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisrICAgIGVzYWM7IFwKKysgIGZpOyBcCisrICBza2lwX25leHQ9bm87IFwKKysgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKysgIHsgXAorKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorKyAgfTsgXAorKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisrICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisrICAgIGNhc2UgJCRmbGcgaW4gXAorKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKysgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisrICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisrICAgIGVzYWM7IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKysgICAgZXNhYzsgXAorKyAgZG9uZTsgXAorKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKKythbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACistcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKKytwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKKyBhbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCisgaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKKyBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitAQCAtMzMsMzggKzc5LDkyIEBAIGJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACisgaG9zdF90cmlwbGV0ID0gQGhvc3RACisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2tfUFJPR1JBTVMgPSBXcml0ZVBMaXN0RXhhbXBsZSQoRVhFRVhUKQorIHN1YmRpciA9IGV4YW1wbGVzL1dyaXRlUExpc3RFeGFtcGxlCistRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCisrRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycyBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisgYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWNpbmNsdWRlLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKysJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisgCSQoQUNMT0NBTF9NNCkKKyBta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycworIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jb25maWcuaAorIENPTkZJR19DTEVBTl9GSUxFUyA9CisrQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KKyBhbV9Xcml0ZVBMaXN0RXhhbXBsZV9PQkpFQ1RTID0gV3JpdGVQTGlzdEV4YW1wbGUuJChPQkpFWFQpCisgV3JpdGVQTGlzdEV4YW1wbGVfT0JKRUNUUyA9ICQoYW1fV3JpdGVQTGlzdEV4YW1wbGVfT0JKRUNUUykKKyBXcml0ZVBMaXN0RXhhbXBsZV9ERVBFTkRFTkNJRVMgPSAke3RvcF9idWlsZGRpcn0vbGliQ29yZUZvdW5kYXRpb24ubGEKKytBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCisrYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9sdF8wID0gLS1zaWxlbnQKKythbV9fdl9sdF8xID0gCisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlCisgZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworK2FtX19tdiA9IG12IC1mCisgQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorIAkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorLUxUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKy0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKKytMVENYWENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSBcCisrCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorKwkkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorK0FNX1ZfQ1hYID0gJChhbV9fdl9DWFhfQEFNX1ZAKQorK2FtX192X0NYWF8gPSAkKGFtX192X0NYWF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9DWFhfMCA9IEBlY2hvICIgIENYWCAgICAgIiAkQDsKKythbV9fdl9DWFhfMSA9IAorIENYWExEID0gJChDWFgpCistQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKy0JJChMREZMQUdTKSAtbyAkQAorK0NYWExJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCisrCSQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorK0FNX1ZfQ1hYTEQgPSAkKGFtX192X0NYWExEX0BBTV9WQCkKKythbV9fdl9DWFhMRF8gPSAkKGFtX192X0NYWExEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NYWExEXzAgPSBAZWNobyAiICBDWFhMRCAgICIgJEA7CisrYW1fX3ZfQ1hYTERfMSA9IAorIFNPVVJDRVMgPSAkKFdyaXRlUExpc3RFeGFtcGxlX1NPVVJDRVMpCisgRElTVF9TT1VSQ0VTID0gJChXcml0ZVBMaXN0RXhhbXBsZV9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTE0LDYgKzIxNCw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMjYsNiArMjI3LDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE0Niw2ICsyNDgsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTgwLDcgKzI4Myw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMTkzLDYgKzI5NSw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIEFNX0NYWEZMQUdTID0gLUkke3RvcF9zcmNkaXJ9L2luY2x1ZGUKK0BAIC0yMDksMTQgKzMxMiwxNCBAQCAkKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maQorIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAorIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorIAkgICAgKiQkZGVwKikgXAorLQkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorLQkJJiYgZXhpdCAwOyBcCisrCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisgCSAgICAgIGV4aXQgMTs7IFwKKyAJICBlc2FjOyBcCisgCWRvbmU7IFwKKy0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZSc7IFwKKy0JY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCistCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBleGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZQorKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvV3JpdGVQTGlzdEV4YW1wbGUvTWFrZWZpbGUnOyBcCisrCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKysJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvV3JpdGVQTGlzdEV4YW1wbGUvTWFrZWZpbGUKKyAuUFJFQ0lPVVM6IE1ha2VmaWxlCisgTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAlAY2FzZSAnJD8nIGluIFwKK0BAIC0yMzQsMTYgKzMzNywyMCBAQCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKyAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisgJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisgCisgY2xlYW4tY2hlY2tQUk9HUkFNUzoKKy0JQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCistCSAgZj1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorLQkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorLQkgIHJtIC1mICQkcCAkJGYgOyBcCistCWRvbmUKKy1Xcml0ZVBMaXN0RXhhbXBsZSQoRVhFRVhUKTogJChXcml0ZVBMaXN0RXhhbXBsZV9PQkpFQ1RTKSAkKFdyaXRlUExpc3RFeGFtcGxlX0RFUEVOREVOQ0lFUykgCisrCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisrCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisrCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisrCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisrCXJtIC1mICQkbGlzdAorKworK1dyaXRlUExpc3RFeGFtcGxlJChFWEVFWFQpOiAkKFdyaXRlUExpc3RFeGFtcGxlX09CSkVDVFMpICQoV3JpdGVQTGlzdEV4YW1wbGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX1dyaXRlUExpc3RFeGFtcGxlX0RFUEVOREVOQ0lFUykgCisgCUBybSAtZiBXcml0ZVBMaXN0RXhhbXBsZSQoRVhFRVhUKQorLQkkKENYWExJTkspICQoV3JpdGVQTGlzdEV4YW1wbGVfT0JKRUNUUykgJChXcml0ZVBMaXN0RXhhbXBsZV9MREFERCkgJChMSUJTKQorKwkkKEFNX1ZfQ1hYTEQpJChDWFhMSU5LKSAkKFdyaXRlUExpc3RFeGFtcGxlX09CSkVDVFMpICQoV3JpdGVQTGlzdEV4YW1wbGVfTERBREQpICQoTElCUykKKyAKKyBtb3N0bHljbGVhbi1jb21waWxlOgorIAktcm0gLWYgKi4kKE9CSkVYVCkKK0BAIC0yNTQsMjUgKzM2MSwyNSBAQCBkaXN0Y2xlYW4tY29tcGlsZToKKyBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvV3JpdGVQTGlzdEV4YW1wbGUuUG9AYW1fX3F1b3RlQAorIAorIC5jcHAubzoKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACisrQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKyAKKyAuY3BwLm9iajoKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorIAorIC5jcHAubG86CistQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChMVENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChMVENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyAJLXJtIC1mICoubG8KK0BAIC0yODAsNDkgKzM4Nyw1NCBAQCBtb3N0bHljbGVhbi1saWJ0b29sOgorIGNsZWFuLWxpYnRvb2w6CisgCS1ybSAtcmYgLmxpYnMgX2xpYnMKKyAKKy1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtdHB5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlta2lkIC1mSUQgJCR1bmlxdWUKKy10YWdzOiBUQUdTCistCistVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCistCXRhZ3M9OyBcCisrSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCisrdGFnczogdGFncy1hbQorK1RBR1M6IHRhZ3MKKysKKyt0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCXNldCB4OyBcCisgCWhlcmU9YHB3ZGA7IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJc2hpZnQ7IFwKKysJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKyAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCistCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisrCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorKwkgIGVsc2UgXAorKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorKwkgICAgICAkJHVuaXF1ZTsgXAorKwkgIGZpOyBcCisgCWZpCistY3RhZ3M6IENUQUdTCistQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisrY3RhZ3M6IGN0YWdzLWFtCisrCisrQ1RBR1M6IGN0YWdzCisrY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAorKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKyAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCistCSAgICAgJCR0YWdzICQkdW5pcXVlCisrCSAgICAgJCR1bmlxdWUKKyAKKyBHVEFHUzoKKyAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKy0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKy0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKysJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisrY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQorKworK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKysJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysJY2FzZSAiJChzcmNkaXIpIiBpbiBcCisrCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAorKwkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCisrCWVzYWM7IFwKKysJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCisrCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAorKwkgIGVsc2UgXAorKwkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKKysJICBmaTsgXAorKwlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKKyAKKyBkaXN0Y2xlYW4tdGFnczoKKyAJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKK0BAIC0zNDMsMTMgKzQ1NSwxNyBAQCBkaXN0ZGlyOiAkKERJU1RGSUxFUykKKyAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisgCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKyAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisrCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKysJICAgIGZpOyBcCisgCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKy0JICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorIAkgICAgZmk7IFwKKy0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKyAJICBlbHNlIFwKKy0JICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisrCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKyAJICAgIHx8IGV4aXQgMTsgXAorIAkgIGZpOyBcCisgCWRvbmUKK0BAIC0zNjgsMTYgKzQ4NCwyMiBAQCBpbnN0YWxsLWFtOiBhbGwtYW0KKyAKKyBpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQorIGluc3RhbGwtc3RyaXA6CistCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCistCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCistCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCistCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICAgaW5zdGFsbDsgXAorKwllbHNlIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorKwlmaQorIG1vc3RseWNsZWFuLWdlbmVyaWM6CisgCisgY2xlYW4tZ2VuZXJpYzoKKyAKKyBkaXN0Y2xlYW4tZ2VuZXJpYzoKKyAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisrCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorIAorIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorQEAgLTM5OSw2ICs1MjEsOCBAQCBkdmktYW06CisgCisgaHRtbDogaHRtbC1hbQorIAorK2h0bWwtYW06CisrCisgaW5mbzogaW5mby1hbQorIAorIGluZm8tYW06CitAQCAtNDA3LDE4ICs1MzEsMjggQEAgaW5zdGFsbC1kYXRhLWFtOgorIAorIGluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorIAorK2luc3RhbGwtZHZpLWFtOgorKworIGluc3RhbGwtZXhlYy1hbToKKyAKKyBpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorIAorK2luc3RhbGwtaHRtbC1hbToKKysKKyBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorIAorK2luc3RhbGwtaW5mby1hbToKKysKKyBpbnN0YWxsLW1hbjoKKyAKKyBpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKyAKKytpbnN0YWxsLXBkZi1hbToKKysKKyBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisgCisraW5zdGFsbC1wcy1hbToKKysKKyBpbnN0YWxsY2hlY2stYW06CisgCisgbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorQEAgLTQ0MSwxMSArNTc1LDExIEBAIHBzLWFtOgorIAorIHVuaW5zdGFsbC1hbToKKyAKKy0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisrLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorIAorLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCistCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIFwKKy0JZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKysuUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCisrCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gXAorKwljdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorIAlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisgCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorIAlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKK0BAIC00NTUsNyArNTg5LDcgQEAgdW5pbnN0YWxsLWFtOgorIAlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisgCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKyAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorLQl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKysJdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKyAKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBjaGVjazoKK0BAIC00NjcsNiArNjAxLDcgQEAgdW5pbnN0YWxsLWFtOgorIAorIEBDRl9CVUlMRF9URVNUU19UUlVFQHZhbGdyaW5kOgorIEBDRl9CVUlMRF9URVNUU19UUlVFQAkke0xJQlRPT0x9IC0tbW9kZSBleGVjdXRlICR7QH0gJHtWQUxHUklOREZMQUdTfSAuL1dyaXRlUExpc3RFeGFtcGxlCisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9NYWtlZmlsZS5pbiBiL2luY2x1ZGUvTWFrZWZpbGUuaW4KK2luZGV4IGZmM2FhYzcuLjg5YmMyOTkgMTAwNjQ0CistLS0gYS9pbmNsdWRlL01ha2VmaWxlLmluCisrKysgYi9pbmNsdWRlL01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE1LDkgKzE1LDU1IEBACisgQFNFVF9NQUtFQAorIAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zMywzMyArNzksOTMgQEAgUE9TVF9VTklOU1RBTEwgPSA6CisgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBzdWJkaXIgPSBpbmNsdWRlCistRElTVF9DT01NT04gPSAkKENTX2luY2x1ZGVfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKy0JJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9jb25maWcuaC5pbgorK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisrCSQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzIFwKKysJJChDU19pbmNsdWRlX0hFQURFUlMpCisgQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FjaW5jbHVkZS5tNCBcCistCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCisrCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisrCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKyBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorIAkkKEFDTE9DQUxfTTQpCisgbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvY29uZmlnL21raW5zdGFsbGRpcnMKKyBDT05GSUdfSEVBREVSID0gY29uZmlnLmgKKyBDT05GSUdfQ0xFQU5fRklMRVMgPQorK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CisrQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKythbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9QXzAgPSBmYWxzZQorK2FtX192X1BfMSA9IDoKKytBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKythbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCisrYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CisrYW1fX3ZfR0VOXzEgPSAKKytBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCisrYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9hdF8wID0gQAorK2FtX192X2F0XzEgPSAKKyBTT1VSQ0VTID0KKyBESVNUX1NPVVJDRVMgPQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworIGFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgICopIGY9JCRwOzsgXAorICAgZXNhYzsKKy1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKKythbV9faW5zdGFsbF9tYXggPSA0MAorK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisrICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCisrYW1fX25vYmFzZV9zdHJpcCA9IFwKKysgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKysgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisrICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisrICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCisrYW1fX2Jhc2VfbGlzdCA9IFwKKysgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisrICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCisrYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKysgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKysgIH0KKyBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoQ1NfaW5jbHVkZWRpcikiCistQ1NfaW5jbHVkZUhFQURFUlNfSU5TVEFMTCA9ICQoSU5TVEFMTF9IRUFERVIpCisgSEVBREVSUyA9ICQoQ1NfaW5jbHVkZV9IRUFERVJTKQorK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSBcCisrCSQoTElTUCljb25maWcuaC5pbgorKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKysjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKysjICpub3QqIHByZXNlcnZlZC4KKythbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKysgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKysgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisrICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKysnCisrIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCisrYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKysgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKysgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCisgRVRBR1MgPSBldGFncworIENUQUdTID0gY3RhZ3MKKyBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorIEFDTE9DQUwgPSBAQUNMT0NBTEAKKyBBTExPQ0EgPSBAQUxMT0NBQAorIEFNVEFSID0gQEFNVEFSQAorK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorIEFSID0gQEFSQAorIEFTID0gQEFTQAorIEFVVE9DT05GID0gQEFVVE9DT05GQAorQEAgLTEwOSw2ICsyMTUsNyBAQCBMTl9TID0gQExOX1NACisgTFRMSUJPQkpTID0gQExUTElCT0JKU0AKKyBNQUlOVCA9IEBNQUlOVEAKKyBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACisgTUtESVJfUCA9IEBNS0RJUl9QQAorIE5NID0gQE5NQAorIE5NRURJVCA9IEBOTUVESVRACitAQCAtMTIxLDYgKzIyOCw3IEBAIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACisgUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKKytQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKKyBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorIFBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorIFBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK0BAIC0xNDEsNiArMjQ5LDcgQEAgYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKKyBhYnNfc3JjZGlyID0gQGFic19zcmNkaXJACisgYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorIGFjX2N0X0NYWCA9IEBhY19jdF9DWFhACisgYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorQEAgLTE3NSw3ICsyODQsNiBAQCBsaWJkaXIgPSBAbGliZGlyQAorIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyBsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKKy1sdF9FQ0hPID0gQGx0X0VDSE9ACisgbWFuZGlyID0gQG1hbmRpckAKKyBta2Rpcl9wID0gQG1rZGlyX3BACisgb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorQEAgLTE4OCw2ICsyOTYsNyBAQCBzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKyBzcmNkaXIgPSBAc3JjZGlyQAorIHN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKyB0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKKyB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyBDU19pbmNsdWRlZGlyID0gJHtpbmNsdWRlZGlyfQorQEAgLTIwOSwxNCArMzE4LDE0IEBAICQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpCisgCUBmb3IgZGVwIGluICQ/OyBkbyBcCisgCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisgCSAgICAqJCRkZXAqKSBcCistCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCistCQkmJiBleGl0IDA7IFwKKysJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisrCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKyAJICAgICAgZXhpdCAxOzsgXAorIAkgIGVzYWM7IFwKKyAJZG9uZTsgXAorLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGluY2x1ZGUvTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgaW5jbHVkZS9NYWtlZmlsZQorKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5jbHVkZS9NYWtlZmlsZSc7IFwKKysJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbmNsdWRlL01ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtMjM0LDE4ICszNDMsMTcgQEAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorIAorIGNvbmZpZy5oOiBzdGFtcC1oMQorLQlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKKy0JICBybSAtZiBzdGFtcC1oMTsgXAorLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgxOyBcCistCWVsc2UgOjsgZmkKKysJQHRlc3QgLWYgJEAgfHwgcm0gLWYgc3RhbXAtaDEKKysJQHRlc3QgLWYgJEAgfHwgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgc3RhbXAtaDEKKyAKKyBzdGFtcC1oMTogJChzcmNkaXIpL2NvbmZpZy5oLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCUBybSAtZiBzdGFtcC1oMQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGluY2x1ZGUvY29uZmlnLmgKKyAkKHNyY2RpcikvY29uZmlnLmguaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpIAorLQljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKysJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisgCXJtIC1mIHN0YW1wLWgxCisgCXRvdWNoICRACisgCitAQCAtMjU5LDY1ICszNjcsNzQgQEAgY2xlYW4tbGlidG9vbDoKKyAJLXJtIC1yZiAubGlicyBfbGlicworIGluc3RhbGwtQ1NfaW5jbHVkZUhFQURFUlM6ICQoQ1NfaW5jbHVkZV9IRUFERVJTKQorIAlAJChOT1JNQUxfSU5TVEFMTCkKKy0JdGVzdCAteiAiJChDU19pbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoQ1NfaW5jbHVkZWRpcikiCistCUBsaXN0PSckKENTX2luY2x1ZGVfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKysJQGxpc3Q9JyQoQ1NfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoQ1NfaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisrCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChDU19pbmNsdWRlZGlyKSciOyBcCisrCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoQ1NfaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAorKwlmaTsgXAorKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKyAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCistCSAgZWNobyAiICQoQ1NfaW5jbHVkZUhFQURFUlNfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKENTX2luY2x1ZGVkaXIpLyQkZiciOyBcCistCSAgJChDU19pbmNsdWRlSEVBREVSU19JTlNUQUxMKSAiJCRkJCRwIiAiJChERVNURElSKSQoQ1NfaW5jbHVkZWRpcikvJCRmIjsgXAorKwkgIGVjaG8gIiQkZCQkcCI7IFwKKysJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisrCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKysJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoQ1NfaW5jbHVkZWRpciknIjsgXAorKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKENTX2luY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAorIAlkb25lCisgCisgdW5pbnN0YWxsLUNTX2luY2x1ZGVIRUFERVJTOgorIAlAJChOT1JNQUxfVU5JTlNUQUxMKQorLQlAbGlzdD0nJChDU19pbmNsdWRlX0hFQURFUlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCistCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKy0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKENTX2luY2x1ZGVkaXIpLyQkZiciOyBcCistCSAgcm0gLWYgIiQoREVTVERJUikkKENTX2luY2x1ZGVkaXIpLyQkZiI7IFwKKy0JZG9uZQorKwlAbGlzdD0nJChDU19pbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChDU19pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKysJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKysJZGlyPSckKERFU1RESVIpJChDU19pbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKysKKytJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKKyt0YWdzOiB0YWdzLWFtCisrVEFHUzogdGFncworIAorLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW10cHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCW1raWQgLWZJRCAkJHVuaXF1ZQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKysJc2V0IHg7IFwKKyAJaGVyZT1gcHdkYDsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXNoaWZ0OyBcCisrCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisgCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKysJICBlbHNlIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgJCR1bmlxdWU7IFwKKysJICBmaTsgXAorIAlmaQorLWN0YWdzOiBDVEFHUworLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKytjdGFnczogY3RhZ3MtYW0KKysKKytDVEFHUzogY3RhZ3MKKytjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKy0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKysJICAgICAkJHVuaXF1ZQorIAorIEdUQUdTOgorIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAorLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisrCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKytjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisrCisrY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorKwljYXNlICIkKHNyY2RpcikiIGluIFwKKysJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCisrCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKysJZXNhYzsgXAorKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKysJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKysJICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCisrCSAgZWxzZSBcCisrCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorKwkgIGZpOyBcCisrCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworIAorIGRpc3RjbGVhbi10YWdzOgorIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworQEAgLTMzOCwxMyArNDU1LDE3IEBAIGRpc3RkaXI6ICQoRElTVEZJTEVTKQorIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKyAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorIAkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKysJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisrCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorKwkgICAgZmk7IFwKKyAJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisgCSAgICBmaTsgXAorLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorIAkgIGVsc2UgXAorLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCistCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKysJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisrCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorIAkgICAgfHwgZXhpdCAxOyBcCisgCSAgZmk7IFwKKyAJZG9uZQorQEAgLTM2NSwxNiArNDg2LDIyIEBAIGluc3RhbGwtYW06IGFsbC1hbQorIAorIGluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCisgaW5zdGFsbC1zdHJpcDoKKy0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKy0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKy0JICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCisrCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgICBpbnN0YWxsOyBcCisrCWVsc2UgXAorKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisrCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKysJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisrCWZpCisgbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKyAKKyBjbGVhbi1nZW5lcmljOgorIAorIGRpc3RjbGVhbi1nZW5lcmljOgorIAktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKysJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisgCisgbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCitAQCAtMzkzLDYgKzUyMCw4IEBAIGR2aS1hbToKKyAKKyBodG1sOiBodG1sLWFtCisgCisraHRtbC1hbToKKysKKyBpbmZvOiBpbmZvLWFtCisgCisgaW5mby1hbToKK0BAIC00MDEsMTggKzUzMCwyOCBAQCBpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtQ1NfaW5jbHVkZUhFQURFUlMKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00MzMsMjAgKzU3MiwyMSBAQCBwcy1hbToKKyAKKyB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1DU19pbmNsdWRlSEVBREVSUworIAorLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKy0KKy0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCistCWNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCistCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1DU19pbmNsdWRlSEVBREVSUyBcCistCWluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCistCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKy0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCistCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLUNTX2luY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1hbQorKy5NQUtFOiBhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisrCisrLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisrCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAorKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIFwKKysJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorKwlpbnN0YWxsIGluc3RhbGwtQ1NfaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKysJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKysJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKysJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKysJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisrCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIFwKKysJdW5pbnN0YWxsLUNTX2luY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1hbQorIAorIGFsbDogQ29yZUZvdW5kYXRpb24KKyAKK0BAIC00NTQsNiArNTk0LDcgQEAgY2hlY2sgaW5zdGFsbDogYWxsCisgCisgQ29yZUZvdW5kYXRpb246IHwgJHtDRl9TT1VSQ0V9CisgCSR7TE5fU30gJHtDRl9TT1VSQ0V9ICRACisrCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKyAuTk9FWFBPUlQ6CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWcuaC5pbiBiL2luY2x1ZGUvY29uZmlnLmguaW4KK2luZGV4IDUxMjljMGEuLjZjNmU2MGUgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2NvbmZpZy5oLmluCisrKysgYi9pbmNsdWRlL2NvbmZpZy5oLmluCitAQCAtMjYzLDcgKzI2Myw3IEBACisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KKyAjdW5kZWYgSEFWRV9TVFJUT1VMCisgCistLyogRGVmaW5lIHRvIDEgaWYgYHRtX3pvbmUnIGlzIG1lbWJlciBvZiBgc3RydWN0IHRtJy4gKi8KKysvKiBEZWZpbmUgdG8gMSBpZiBgdG1fem9uZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB0bScuICovCisgI3VuZGVmIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUKKyAKKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN5bWxpbmsnIGZ1bmN0aW9uLiAqLworQEAgLTQwMSw5ICs0MDEsNiBAQAorICAgICovCisgI3VuZGVmIExUX09CSkRJUgorIAorLS8qIERlZmluZSB0byAxIGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8gdG9nZXRoZXIuICovCistI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTworLQorIC8qIE5hbWUgb2YgcGFja2FnZSAqLworICN1bmRlZiBQQUNLQUdFCisgCitAQCAtNDE5LDYgKzQxNiw5IEBACisgLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworICN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKyAKKysvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworKyN1bmRlZiBQQUNLQUdFX1VSTAorKworIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisgI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorIAorQEAgLTQ2MCw2ICs0NjAsMjggQEAKKyAgICAvdXNyL3NoYXJlL3pvbmVpbmZvKSBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4gKi8KKyAjdW5kZWYgVFpESVIKKyAKKysvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBBSVggMywgSW50ZXJpeC4gICovCisrI2lmbmRlZiBfQUxMX1NPVVJDRQorKyMgdW5kZWYgX0FMTF9TT1VSQ0UKKysjZW5kaWYKKysvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgdW5kZWYgX0dOVV9TT1VSQ0UKKysjZW5kaWYKKysvKiBFbmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisrI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworKyNlbmRpZgorKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEhQIE5vblN0b3AuICAqLworKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjIHVuZGVmIF9UQU5ERU1fU09VUkNFCisrI2VuZGlmCisrLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKysjaWZuZGVmIF9fRVhURU5TSU9OU19fCisrIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworKyNlbmRpZgorKworKworIC8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyAjdW5kZWYgVkVSU0lPTgorIAorQEAgLTQ2OCwyMyArNDkwLDI4IEBACisgIyB1bmRlZiBfQlNEX1NPVVJDRQorICNlbmRpZgorIAorLS8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKy0jaWZuZGVmIF9HTlVfU09VUkNFCistIyB1bmRlZiBfR05VX1NPVVJDRQorLSNlbmRpZgorKy8qIERlZmluZSB0byAxIGlmIG9uIE1JTklYLiAqLworKyN1bmRlZiBfTUlOSVgKKysKKysvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorKyAgIHRoaXMgZGVmaW5lZC4gKi8KKysjdW5kZWYgX1BPU0lYXzFfU09VUkNFCisrCisrLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisrI3VuZGVmIF9QT1NJWF9TT1VSQ0UKKyAKKyAvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQzMl90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorLSAgIDxwdGhyZWFkLmg+LCBvciA8c2VtYXBob3JlLmg+IGlzIG5vdCB1c2VkLiBJZiB0aGUgdHlwZWRlZiB3YXMgYWxsb3dlZCwgdGhlCisrICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAgI2RlZmluZSBiZWxvdyB3b3VsZCBjYXVzZSBhIHN5bnRheCBlcnJvci4gKi8KKyAjdW5kZWYgX1VJTlQzMl9UCisgCisgLyogRGVmaW5lIGZvciBTb2xhcmlzIDIuNS4xIHNvIHRoZSB1aW50NjRfdCB0eXBlZGVmIGZyb20gPHN5cy9zeW5jaC5oPiwKKy0gICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2FzIGFsbG93ZWQsIHRoZQorKyAgIDxwdGhyZWFkLmg+LCBvciA8c2VtYXBob3JlLmg+IGlzIG5vdCB1c2VkLiBJZiB0aGUgdHlwZWRlZiB3ZXJlIGFsbG93ZWQsIHRoZQorICAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisgI3VuZGVmIF9VSU5UNjRfVAorIAorIC8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDhfdCB0eXBlZGVmIGZyb20gPHN5cy9zeW5jaC5oPiwKKy0gICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2FzIGFsbG93ZWQsIHRoZQorKyAgIDxwdGhyZWFkLmg+LCBvciA8c2VtYXBob3JlLmg+IGlzIG5vdCB1c2VkLiBJZiB0aGUgdHlwZWRlZiB3ZXJlIGFsbG93ZWQsIHRoZQorICAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisgI3VuZGVmIF9VSU5UOF9UCisgCitAQCAtNTMwLDkgKzU1NywxOSBAQAorIC8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyAjdW5kZWYgcGlkX3QKKyAKKy0vKiBEZWZpbmUgdG8gZXF1aXZhbGVudCBvZiBDOTkgcmVzdHJpY3Qga2V5d29yZCwgb3IgdG8gbm90aGluZyBpZiB0aGlzIGlzIG5vdAorLSAgIHN1cHBvcnRlZC4gRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcyBzdXBwb3J0ZWQgZGlyZWN0bHkuICovCisrLyogRGVmaW5lIHRvIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBDOTkgJ3Jlc3RyaWN0JyBrZXl3b3JkLCBvciB0bworKyAgIG5vdGhpbmcgaWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcworKyAgIHN1cHBvcnRlZCBkaXJlY3RseS4gICovCisgI3VuZGVmIHJlc3RyaWN0CisrLyogV29yayBhcm91bmQgYSBidWcgaW4gU3VuIEMrKzogaXQgZG9lcyBub3Qgc3VwcG9ydCBfUmVzdHJpY3Qgb3IKKysgICBfX3Jlc3RyaWN0X18sIGV2ZW4gdGhvdWdoIHRoZSBjb3JyZXNwb25kaW5nIFN1biBDIGNvbXBpbGVyIGVuZHMgdXAgd2l0aAorKyAgICIjZGVmaW5lIHJlc3RyaWN0IF9SZXN0cmljdCIgb3IgIiNkZWZpbmUgcmVzdHJpY3QgX19yZXN0cmljdF9fIiBpbiB0aGUKKysgICBwcmV2aW91cyBsaW5lLiAgUGVyaGFwcyBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIFN1biBDKysgd2lsbCB3b3JrIHdpdGgKKysgICByZXN0cmljdDsgaWYgc28sIGhvcGVmdWxseSBpdCBkZWZpbmVzIF9fUkVTVFJJQ1QgbGlrZSBTdW4gQyBkb2VzLiAgKi8KKysjaWYgZGVmaW5lZCBfX1NVTlBST19DQyAmJiAhZGVmaW5lZCBfX1JFU1RSSUNUCisrIyBkZWZpbmUgX1Jlc3RyaWN0CisrIyBkZWZpbmUgX19yZXN0cmljdF9fCisrI2VuZGlmCisgCisgLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworICN1bmRlZiBzaXplX3QKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ3YzA0M2YKKy0tLSAvZGV2L251bGwKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC0wLDAgKzEsNzk5NyBAQAorKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisrIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKysjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKysjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorKyMgICAgICAgICAgICAgICAgIEZvdW5kYXRpb24sIEluYy4KKysjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorKyMKKysjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisrIworKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKysjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisrIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysjCisrIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKysjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisrXSkKKysKKysjIHNlcmlhbCA1NyBMVF9JTklUCisrCisrCisrIyBMVF9QUkVSRVEoVkVSU0lPTikKKysjIC0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCisrbTRfZGVmdW4oW0xUX1BSRVJFUV0sCisrW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorKwkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKKysJCSAgICAgICAgICAgICA2MyldKV0sCisrICAgICAgIFskMl0pXSkKKysKKysKKysjIF9MVF9DSEVDS19CVUlMRERJUgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCisrbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCisrW2Nhc2UgYHB3ZGAgaW4KKysgICpcICogfCAqXAkqKQorKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKKytlc2FjCisrXSkKKysKKysKKysjIExUX0lOSVQoW09QVElPTlNdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW0xUX0lOSVRdLAorK1tBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorK0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCisrQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorKworK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCisrbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorK0FDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKKytBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKKytBQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisrCisrX0xUX1NIRUxMX0lOSVQoW1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9XSkKKysKKytkbmwgUGFyc2UgT1BUSU9OUworK19MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorKworKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKKytMSUJUT09MX0RFUFM9IiRsdG1haW4iCisrCisrIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytBQ19TVUJTVChMSUJUT09MKWRubAorKworK19MVF9TRVRVUAorKworKyMgT25seSBleHBhbmQgb25jZToKKyttNF9kZWZpbmUoW0xUX0lOSVRdKQorK10pIyBMVF9JTklUCisrCisrIyBPbGQgbmFtZXM6CisrQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKKytBVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKytkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorK2RubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCisrCisrCisrIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCisrbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCisrW2ZvciBjY190ZW1wIGluICQxIiI7IGRvCisrICBjYXNlICRjY190ZW1wIGluCisrICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisrICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworKyAgICBcLSopIDs7CisrICAgICopIGJyZWFrOzsKKysgIGVzYWMKKytkb25lCisrY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCisrXSkKKysKKysKKysjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKysjIHNlbnNpYmx5IGFmdGVyIGBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKKytbOiAke0NQPSJjcCAtZiJ9CisrOiAke01WPSJtdiAtZiJ9CisrOiAke1JNPSJybSAtZiJ9CisrXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKysKKysKKysjIF9MVF9TRVRVUAorKyMgLS0tLS0tLS0tCisrbTRfZGVmdW4oW19MVF9TRVRVUF0sCisrW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorK0FDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKKytBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisrCisrX0xUX0RFQ0woW10sIFtQQVRIX1NFUEFSQVRPUl0sIFsxXSwgW1RoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbV0pZG5sCisrZG5sCisrX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKKytfTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCisrX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorK2RubAorK19MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKKytfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCisrZG5sCisrQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCisrQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCisrZG5sCisrQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKKyt0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCisrX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCisrZG5sCisrQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAorK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKKytfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCisrZG5sCisrbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKKysKKytfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisrIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCisraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisrICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytmaQorK10pCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKysgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorK2ZpCisrCisrX0xUX0NIRUNLX09CSkRJUgorKworK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorKworK2Nhc2UgJGhvc3Rfb3MgaW4KKythaXgzKikKKysgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisrICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisrICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKysgICAgQ09MTEVDVF9OQU1FUz0KKysgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKysgIGZpCisrICA7OworK2VzYWMKKysKKysjIEdsb2JhbCB2YXJpYWJsZXM6Cisrb2ZpbGU9bGlidG9vbAorK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisrCisrIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisrIyB3aGljaCBuZWVkcyAnLmxpYicpLgorK2xpYmV4dD1hCisrCisrd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKysKKytvbGRfQ0M9IiRDQyIKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorKworKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCisrdGVzdCAteiAiJENDIiAmJiBDQz1jYworK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQworK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUworK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKKyt0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworKworK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKysKKysjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKKyt0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisrZmlsZV9tYWdpYyopCisrICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisrICAgIF9MVF9QQVRIX01BR0lDCisrICBmaQorKyAgOzsKKytlc2FjCisrCisrIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKytMVF9TVVBQT1JURURfVEFHKFtDQ10pCisrX0xUX0xBTkdfQ19DT05GSUcKKytfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworK19MVF9DT05GSUdfQ09NTUFORFMKKytdKSMgX0xUX1NFVFVQCisrCisrCisrIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIERlZmluZSBhIGZldyBzZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscCB1cyBkbyByb2J1c3QgcXVvdGluZy4KKyttNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAorK1sjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisrIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCisrc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworKworKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworKworKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisrIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisrCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KKytkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworKworKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworK10pCisrCisrIyBfTFRfUFJPR19MVE1BSU4KKysjIC0tLS0tLS0tLS0tLS0tLQorKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisrIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorKyMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KKyttNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKKytbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorK10pIyBfTFRfUFJPR19MVE1BSU4KKysKKysKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorKyMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKKysjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisrIyBsYWJlbC4KKysKKysKKysjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KKyttNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKKytbbTRfaWZ2YWwoWyQxXSwKKysgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorKyAgICAgICAgICAgICAgICAgICAgIFskMQorK10pXSldKQorKworKyMgSW5pdGlhbGl6ZS4KKyttNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKKysKKysKKysjIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKKytbbTRfaWZ2YWwoWyQxXSwKKysgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKysgICAgICAgICAgICAgICAgICAgICBbJDEKKytdKV0pXSkKKysKKysjIEluaXRpYWxpemUuCisrbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorKworKworKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCisrW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCisrXSkKKysKKysKKysjIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworKyMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgorK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKKytbbTRfaWZ2YWwoWyQxXSwgWworK200X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCisrICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCisrKV0pCisrCisrCisrCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrCisrCisrIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisrIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorKyMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCisrIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KKyttNF9kZWZpbmUoW19MVF9ERUNMXSwKKytbbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAorKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKysJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKysgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQorKyAgICBtNF9pZnZhbChbJDRdLAorKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisrICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKKysJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorK10pCisrCisrCisrIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisrCisrCisrIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAorK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKysKKysKKysjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAorK1ttNF9jYXNlKFskI10sCisrICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKysgIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKysgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKysgIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAorK10pCisrCisrCisrIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAorK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorKworKworKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKKytbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKysKKysKKysjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCisrW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCisrXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisrICAgIG00X2lmdmFsKFskMl0sIFtbJDJdXSwgW200X2RxdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyldKSwKKysgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKKyttNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCisrW200X2lmdmFsKFskM10sIFtsdF9jb21iaW5lKFskMV0sIFskMl0sIFtfXSwgJDMpXSldKQorKworKworKyMgbHRfZGVjbF9hbGxfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKKytbXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisrICAgICBtNF9pZihbJDJdLCBbXSwKKysJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisrCW00X3F1b3RlKG00X3NoaWZ0KCRAKSkpKVtdZG5sCisrXSkKKyttNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCisrW2x0X2pvaW4oJEAsIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFskMV0sCisrCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKKytdKQorKworKworKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorKyMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgorK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCisrWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorKworKworKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisrIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKKysjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorKyMKKysjICAgIDx2YXI+PSdgJEVDSE8gIiQ8dmFyPiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCisrW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisrICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCisrCisrCisrIyBfTFRfTElCVE9PTF9UQUdTCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CisrbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCisrYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorK10pCisrCisrCisrIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKysjIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorKyMKKysjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKysjICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCisrW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorKwkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCisrbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisrICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKKyttNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKysgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisrICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorKyAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKysgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCisrbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCisrXSkKKysKKysKKysjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisrIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKysjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorK200X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCisrW200X2ZvcmVhY2goW19sdF92YXJdLAorKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorKworKworKyMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorKworKworKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorKworKworKyMgX0xUX0NPTkZJR19DT01NQU5EUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisrIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKysjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisrIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KKyttNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCisrW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisrCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisrICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKysgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKysgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisrICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKKytdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisrCisrCisrIyBJbml0aWFsaXplLgorK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorK1sKKysKKysjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorKyMgaWYgQ0RQQVRIIGlzIHNldC4KKysodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisrCisrc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKKytkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworK0xUQ0M9JyRMVENDJworK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCisrY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworKworKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KKytmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyt7CisrICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorK1wkW10xCisrX0xURUNIT19FT0YnCisrfQorKworKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCisrZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCisrXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKysgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKysgICAgICA7OworKyAgICBlc2FjCisrZG9uZQorKworKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKytmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKKytdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKysgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKysgICAgICA7OworKyAgICBlc2FjCisrZG9uZQorKworK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCisrXSkKKysKKysjIF9MVF9HRU5FUkFURURfRklMRV9JTklUKEZJTEUsIFtDT01NRU5UXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KKysjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKKysjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQorKyMgYCMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcworKyMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCisrIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCisrIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgorK200X2lmZGVmKFtBU19JTklUX0dFTkVSQVRFRF0sCisrW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKKytbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSwKKytbbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pXWRubAorK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorK1tsdF93cml0ZV9mYWlsPTAKKytjYXQgPiQxIDw8X0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorKyMhICRTSEVMTAorKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyskMgorK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CisrZXhwb3J0IFNIRUxMCisrX0FTRU9GCisrY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorK0FTX1NIRUxMX1NBTklUSVpFCisrX0FTX1BSRVBBUkUKKytleGVjIEFTX01FU1NBR0VfRkQ+JjEKKytfQVNFT0YKKyt0ZXN0ICRsdF93cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkMVtdZG5sCisrbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKKysKKysjIExUX09VVFBVVAorKyMgLS0tLS0tLS0tCisrIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisrIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorKyMgdGVzdHMuCisrQUNfREVGVU4oW0xUX09VVFBVVF0sCisrWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CisrQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCisrX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoWyIkQ09ORklHX0xUIl0sCisrWyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXSkKKysKKytjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCisrbHRfY2xfc2lsZW50PWZhbHNlCisrZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworK3sKKysgIGVjaG8KKysgIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKKyt9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKysKKytsdF9jbF9oZWxwPSJcCisrXGAkYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworK2dlbmVyYXRlZC4KKysKKytVc2FnZTogJFswXSBbW09QVElPTlNdXQorKworKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworKyAgLWQsIC0tZGVidWcgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKysKKytSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorKworK2x0X2NsX3ZlcnNpb249IlwKKyttNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCisrbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKKytjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKysKKytDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisrCisrd2hpbGUgdGVzdCAkWyNdICE9IDAKKytkbworKyAgY2FzZSAkWzFdIGluCisrICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisrICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKysgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKysgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKysgICAgICBkZWJ1Zz06IDs7CisrICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisrCisrICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KKytUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKysKKysgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KKytUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKysgIGVzYWMKKysgIHNoaWZ0CisrZG9uZQorKworK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKysgIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKKytmaQorK19MVEVPRgorKworK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCisrX0xURU9GCisrCisrY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCisrX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCisrQVNfRVhJVCgwKQorK19MVEVPRgorK2NobW9kICt4ICIkQ09ORklHX0xUIgorKworKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCisrIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKysjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKysjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCisrbHRfY2xfc3VjY2Vzcz06CisrdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKysgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKKytleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorKyRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKKytleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCisrJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorK10pIyBMVF9PVVRQVVQKKysKKysKKysjIF9MVF9DT05GSUcoVEFHKQorKyMgLS0tLS0tLS0tLS0tLS0tCisrIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisrIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdW50YWdnZWQgY29uZmlnIHZhcnMuICBPdGhlcndpc2UgYWRkIGNvZGUKKysjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKysjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KKyttNF9kZWZ1bihbX0xUX0NPTkZJR10sCisrW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisrICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKKysgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisrICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrICAgIGZpCisrCisrICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKysgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKysgICAgJFJNICIkY2ZnZmlsZSIKKysKKysgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisrIyEgJFNIRUxMCisrCisrIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKysjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKysjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKysjCisrX0xUX0NPUFlJTkcKKytfTFRfTElCVE9PTF9UQUdTCisrCisrIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKytfTFRfTElCVE9PTF9DT05GSUdfVkFSUworK19MVF9MSUJUT09MX1RBR19WQVJTCisrIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisrCisrX0xUX0VPRgorKworKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgYWl4MyopCisrICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKysjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKysjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKysjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisrICBDT0xMRUNUX05BTUVTPQorKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKytmaQorK19MVF9FT0YKKysgICAgOzsKKysgIGVzYWMKKysKKysgIF9MVF9QUk9HX0xUTUFJTgorKworKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisrICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisrICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorKyAgY2htb2QgK3ggIiRvZmlsZSIKKytdLAorK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisrCisrZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKKytkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKKytfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCisrX0xUX0VPRgorK10pZG5sIC9tNF9pZgorK10sCisrW200X2lmKFskMV0sIFtdLCBbCisrICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKysgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworKyAgICBSTT0nJFJNJworKyAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKKytdKSMgX0xUX0NPTkZJRworKworKworKyMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKysjIC0tdGFnIG9wdGlvbiwgdXNpbmc6CisrIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisrCisrCisrIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworK200X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCisrbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorKworKworKyMgTFRfTEFORyhMQU5HKQorKyMgLS0tLS0tLS0tLS0tLQorKyMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCisrQUNfREVGVU4oW0xUX0xBTkddLAorK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCisrbTRfY2FzZShbJDFdLAorKyAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCisrICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKysgIFtHb10sCQkJW19MVF9MQU5HKEdPKV0sCisrICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCisrICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisrICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKKysgIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCisrICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKysgICAgW19MVF9MQU5HKCQxKV0sCisrICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCisrXSkjIExUX0xBTkcKKysKKysKKysjIF9MVF9MQU5HKExBTkdOQU1FKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmdW4oW19MVF9MQU5HXSwKKytbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorKyAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKKysgIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKKysgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisrICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKKytdKSMgX0xUX0xBTkcKKysKKysKKyttNF9pZm5kZWYoW0FDX1BST0dfR09dLCBbCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisrIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfR08uICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICAjCisrIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisrIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrbTRfZGVmdW4oW0FDX1BST0dfR09dLAorK1tBQ19MQU5HX1BVU0goR28pZG5sCisrQUNfQVJHX1ZBUihbR09DXSwgICAgIFtHbyBjb21waWxlciBjb21tYW5kXSlkbmwKKytBQ19BUkdfVkFSKFtHT0ZMQUdTXSwgW0dvIGNvbXBpbGVyIGZsYWdzXSlkbmwKKytfQUNfQVJHX1ZBUl9MREZMQUdTKClkbmwKKytBQ19DSEVDS19UT09MKEdPQywgZ2NjZ28pCisraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKysgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICAgQUNfQ0hFQ0tfUFJPRyhHT0MsIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSwgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dKQorKyAgZmkKKytmaQorK2lmIHRlc3QgLXogIiRHT0MiOyB0aGVuCisrICBBQ19DSEVDS19QUk9HKEdPQywgZ2NjZ28sIGdjY2dvLCBmYWxzZSkKKytmaQorK10pI200X2RlZnVuCisrXSkjbTRfaWZuZGVmCisrCisrCisrIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorKyAgW0xUX0xBTkcoQ1hYKV0sCisrICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorKworK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCisrICBbTFRfTEFORyhGNzcpXSwKKysgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisrCisrQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorKyAgW0xUX0xBTkcoRkMpXSwKKysgIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCisrCisrZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorK2RubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgorK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisrICBbTFRfTEFORyhHQ0opXSwKKysgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisrICAgIFtMVF9MQU5HKEdDSildLAorKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKysgICAgICBbTFRfTEFORyhHQ0opXSwKKysgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKysJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKysgICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAorKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKysgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKysJW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKKysKKytBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HT10sCisrICBbTFRfTEFORyhHTyldLAorKyAgW200X2RlZmluZShbQUNfUFJPR19HT10sIGRlZm4oW0FDX1BST0dfR09dKVtMVF9MQU5HKEdPKV0pXSkKKysKKytBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisrICBbTFRfTEFORyhSQyldLAorKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKKytdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKysKKysjIE9ic29sZXRlIG1hY3JvczoKKytBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKKytBVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCisrQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCisrQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorK0FVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQorK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKytkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCisrZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKKytkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKKysKKysKKysjIF9MVF9UQUdfQ09NUElMRVIKKysjIC0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX1RBR19DT01QSUxFUl0sCisrW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKworK19MVF9ERUNMKFtMVENDXSwgW0NDXSwgWzFdLCBbQSBDIGNvbXBpbGVyXSlkbmwKKytfTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCisrX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCisrX0xUX1RBR0RFQ0woW3dpdGhfZ2NjXSwgW0dDQ10sIFswXSwgW0lzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyP10pZG5sCisrCisrIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KKytMVENDPSR7TFRDQy0iJENDIn0KKysKKysjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCisrTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisrCisrIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKytjb21waWxlcj0kQ0MKKytdKSMgX0xUX1RBR19DT01QSUxFUgorKworKworKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCisrbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCisrW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCisrYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisrZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKKytldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKKytfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCisrJFJNIGNvbmZ0ZXN0KgorK10pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKysKKysKKysjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKysjIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCisrbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CisrZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCisrX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyskUk0gLXIgY29uZnRlc3QqCisrXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysKKysjIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmdW5fb25jZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKysgICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCisrICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCisrICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKysgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0xdLCBbb3Rvb2xdLCBbOl0pCisrICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKKysgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKysgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWF0pCisrICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAorKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisrICAgIF9MVF9ERUNMKFtdLCBbTElQT10sIFsxXSwKKysgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCisrICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisrICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYXSkKKysgICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAorKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisrCisrICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKKysgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKysJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisrCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisrCSMgbGluayBmbGFncy4KKysJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisrCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisrCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKysgICAgICAgIF9sdF9yZXN1bHQ9JD8KKysJIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKKysJIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKKysgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisrCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisrCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCisrCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCisrCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwOyB0aGVuCisrCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKysJZWxzZQorKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorKwlmaQorKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisrCXJtIC1mIGNvbmZ0ZXN0LioKKysgICAgICBmaV0pCisrCisrICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisrICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdF0sCisrICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKysgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisrCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKKysJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisrCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgIF0pCisrCisrICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKKysgICAgICBbbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CisrX0xUX0VPRgorKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECisrICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CisrX0xUX0VPRgorKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisrICAgICAgX2x0X3Jlc3VsdD0kPworKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCisrCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKysJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKysgICAgICBlbHNlCisrCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgIGZpCisrICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisrICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorKyAgICBdKQorKyAgICBjYXNlICRob3N0X29zIGluCisrICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKysgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisrICAgIGRhcndpbjEuKikKKysgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisrICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKysgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKysJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQorKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKysJMTAuW1swMTJdXSopCisrCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworKwkxMC4qKQorKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKysgICAgICBlc2FjCisrICAgIDs7CisrICBlc2FjCisrICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKysgICAgZmkKKysgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKysgICAgZWxzZQorKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworKyAgICBmaQorKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisrICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKysgICAgZWxzZQorKyAgICAgIF9sdF9kc3ltdXRpbD0KKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytdKQorKworKworKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoW1RBR10pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KKyttNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorK1sKKysgIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKKysgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKysgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisrICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworKyAgICBtNF9jYXNlKFskMV0sIFtGNzddLCBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdLAorKyAgICAgICAgICAgICAgICAgIFtGQ10sICBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdKQorKyAgZWxzZQorKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKysgIGZpCisrICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKysgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKysgIGVzYWMKKysgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKysgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKysgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKysgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKKytbICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKysgICAgZmkKKytdLFtdKQorKyAgZWxzZQorKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgZmkKKytdKQorKworKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKysjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorKyMgU3RvcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBmb3IgZWFjaCBUQUdOQU1FLgorKyMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KKyttNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorK2lmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nWworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9XScKKysgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpXSxbXSkKKysgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKysgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisrICBmaQorKyAgXSkKKysgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorK2ZpCisrXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCisrCisrIyBfTFRfU0hFTExfSU5JVChBUkcpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCisrW200X2RpdmVydF90ZXh0KFtNNFNILUlOSVRdLCBbJDEKKytdKV0pIyBfTFRfU0hFTExfSU5JVAorKworKworKworKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgorKyMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0CisrIyBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2ggd2lsbCBmaW5kIGEgc2hlbGwgd2l0aCBhIGJ1aWx0aW4KKysjIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCisrW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisrRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisrRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKysKKytBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKysjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKysgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorKyAgRUNITz0ncHJpbnQgLXIgLS0nCisrZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKysgIEVDSE89J3ByaW50ZiAlc1xuJworK2Vsc2UKKysgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKysgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorKyAgeworKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorKyRbXTEKKytfTFRFQ0hPX0VPRicKKysgIH0KKysgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKKytmaQorKworKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKysjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCisrZnVuY19lY2hvX2FsbCAoKQorK3sKKysgICAgJEVDSE8gIiQqIiAKKyt9CisrCisrY2FzZSAiJEVDSE8iIGluCisrICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OworKyAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CisrICAqKSBBQ19NU0dfUkVTVUxUKFtjYXRdKSA7OworK2VzYWMKKysKKyttNF9pZmRlZihbX0FTX0RFVEVDVF9TVUdHRVNURURdLAorK1tfQVNfREVURUNUX1NVR0dFU1RFRChbCisrICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCisrICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisrICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisrICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCisrICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKKysKKytfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCisrX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorK10pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorKworKworKyMgX0xUX1dJVEhfU1lTUk9PVAorKyMgLS0tLS0tLS0tLS0tLS0tLQorK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKKytbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCisrQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorK1sgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuXSwKKytbXSwgW3dpdGhfc3lzcm9vdD1ub10pCisrCisrZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorK2RubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgQUNfTVNHX1JFU1VMVChbJHt3aXRoX3N5c3Jvb3R9XSkKKysgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQorKyAgIDs7CisrZXNhYworKworKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCisrX0xUX0RFQ0woW10sIFtsdF9zeXNyb290XSwgWzBdLCBbVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBdZG5sCisrW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQorKworKyMgX0xUX0VOQUJMRV9MT0NLCisrIyAtLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKKytbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisrICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQorK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisrCisrIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisrIyBsaWJ0b29sIHN1cHBvcnQuCisrY2FzZSAkaG9zdCBpbgorK2lhNjQtKi1ocHV4KikKKysgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKysgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisrICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisrICAgICAgKkVMRi0zMiopCisrCUhQVVhfSUE2NF9NT0RFPSIzMiIKKysJOzsKKysgICAgICAqRUxGLTY0KikKKysJSFBVWF9JQTY0X01PREU9IjY0IgorKwk7OworKyAgICBlc2FjCisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOzsKKysqLSotaXJpeDYqKQorKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKysgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysJKjMyLWJpdCopCisrCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKysJICA7OworKwkqTjMyKikKKysJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisrCSAgOzsKKysJKjY0LWJpdCopCisrCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorKwk7OworKyAgICAgIGVzYWMKKysgICAgZWxzZQorKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysJKjMyLWJpdCopCisrCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKysJICA7OworKwkqTjMyKikKKysJICBMRD0iJHtMRC1sZH0gLW4zMiIKKysJICA7OworKwkqNjQtYml0KikKKysJICBMRD0iJHtMRC1sZH0gLTY0IgorKwkgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZmkKKysgIHJtIC1yZiBjb25mdGVzdCoKKysgIDs7CisrCisreDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKKytzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisrICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKysgICAgICAqMzItYml0KikKKysJY2FzZSAkaG9zdCBpbgorKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKysJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorKwkgICAgOzsKKysJICB4ODZfNjQtKmxpbnV4KikKKysJICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKysJICAgICAgKng4Ni02NCopCisrCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorKwkJOzsKKysJICAgICAgKikKKysJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKysJCTs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwkgIHBvd2VycGM2NGxlLSopCisrCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisrCSAgICA7OworKwkgIHBvd2VycGM2NC0qKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisrCSAgICA7OworKwkgIHMzOTB4LSpsaW51eCopCisrCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisrCSAgICA7OworKwkgIHNwYXJjNjQtKmxpbnV4KikKKysJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKysJICAgIDs7CisrCWVzYWMKKysJOzsKKysgICAgICAqNjQtYml0KikKKysJY2FzZSAkaG9zdCBpbgorKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKysJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisrCSAgICA7OworKwkgIHg4Nl82NC0qbGludXgqKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisrCSAgICA7OworKwkgIHBvd2VycGNsZS0qKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKysJICAgIDs7CisrCSAgcG93ZXJwYy0qKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorKwkgICAgOzsKKysJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisrCSAgICA7OworKwkgIHNwYXJjKi0qbGludXgqKQorKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICBlc2FjCisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOzsKKysKKysqLSotc2NvMy4ydjUqKQorKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisrICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCisrICAgIFtBQ19MQU5HX1BVU0goQykKKysgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisrICAgICBBQ19MQU5HX1BPUF0pCisrICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKysgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisrICBmaQorKyAgOzsKKysqLSpzb2xhcmlzKikKKysgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKysgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisrICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisrICAgICo2NC1iaXQqKQorKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisrICAgICAgeWVzKikKKysgICAgICAgIGNhc2UgJGhvc3QgaW4KKysgICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKysgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisrICAgICAgICAgIDs7CisrICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKysgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorKyAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisrICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorKyAgICAgICAgZmkKKysgICAgICAgIDs7CisrICAgICAgKikKKysJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgTEQ9IiR7TEQtbGR9IC02NCIKKysJZmkKKysJOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZmkKKysgIHJtIC1yZiBjb25mdGVzdCoKKysgIDs7CisrZXNhYworKworK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorK10pIyBfTFRfRU5BQkxFX0xPQ0sKKysKKysKKysjIF9MVF9QUk9HX0FSCisrIyAtLS0tLS0tLS0tLQorK200X2RlZnVuKFtfTFRfUFJPR19BUl0sCisrW0FDX0NIRUNLX1RPT0xTKEFSLCBbYXJdLCBmYWxzZSkKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKytfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKKytfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydF0sIFtsdF9jdl9hcl9hdF9maWxlXSwKKysgIFtsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCisrICAgICBbZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJworKyAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwlBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrICAgICBdKQorKyAgXSkKKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKytfTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKKysgIFtIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXJdKQorK10pIyBfTFRfUFJPR19BUgorKworKworKyMgX0xUX0NNRF9PTERfQVJDSElWRQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKKytbX0xUX1BST0dfQVIKKysKKytBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKKyt0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKytfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorKworK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCisrdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKKytfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKysgICAgW0NvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCisrCisrIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCisrb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCisrb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisrCisraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG9wZW5ic2QqKQorKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisrICAgIDs7CisrICAqKQorKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisrICAgIDs7CisrICBlc2FjCisrICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorK2ZpCisrCisrY2FzZSAkaG9zdF9vcyBpbgorKyAgZGFyd2luKikKKysgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworKyAgKikKKysgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7CisrZXNhYworK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCisrX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKysgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorK19MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAorKyAgICBbV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uXSkKKytdKSMgX0xUX0NNRF9PTERfQVJDSElWRQorKworKworKyMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKysjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCisrQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisrICBbJDI9bm8KKysgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisrICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisrICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKysgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKysgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisrICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisrICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisrICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKysgICBhY19zdGF0dXM9JD8KKysgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKysgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisrICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisrICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICQyPXllcworKyAgICAgZmkKKysgICBmaQorKyAgICRSTSBjb25mdGVzdCoKKytdKQorKworK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisrICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKKytlbHNlCisrICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKKytmaQorK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisrCisrIyBPbGQgbmFtZToKKytBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKKysKKysKKysjIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcworK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCisrW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCisrQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKysgIFskMj1ubworKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisrICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisrICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisrICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKysgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKysgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKysgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisrICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgICQyPXllcworKyAgICAgICBmaQorKyAgICAgZWxzZQorKyAgICAgICAkMj15ZXMKKysgICAgIGZpCisrICAgZmkKKysgICAkUk0gLXIgY29uZnRlc3QqCisrICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytdKQorKworK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisrICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKKytlbHNlCisrICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKKytmaQorK10pIyBfTFRfTElOS0VSX09QVElPTgorKworKyMgT2xkIG5hbWU6CisrQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW10pCisrCisrCisrIyBMVF9DTURfTUFYX0xFTgorKyMtLS0tLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisrQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCisrQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisrICBpPTAKKysgIHRlc3RzdHJpbmc9IkFCQ0QiCisrCisrICBjYXNlICRidWlsZF9vcyBpbgorKyAgbXNkb3NkamdwcCopCisrICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKysgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorKyAgICA7OworKworKyAgZ251KikKKysgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisrICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisrICAgIDs7CisrCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisrICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKysgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisrICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisrICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworKyAgICA7OworKworKyAgbWludCopCisrICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKysgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisrICAgIDs7CisrCisrICBhbWlnYW9zKikKKysgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKysgICAgOzsKKysKKysgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisrICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKysgICAgZWxzZQorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworKyAgICBmaQorKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorKyAgICA7OworKworKyAgaW50ZXJpeCopCisrICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisrICAgIDs7CisrCisrICBvczIqKQorKyAgICAjIFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIG9uIE9TLzIuCisrICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisrICAgIDs7CisrCisrICBvc2YqKQorKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKysgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKysgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKysgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisrICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorKyAgICAjCisrICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisrICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKysgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgICA7OworKyAgc2NvMy4ydjUqKQorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisrICAgIDs7CisrICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisrICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisrICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorKyAgICBlbHNlCisrICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisrICAgIGZpCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgJiYgXAorKwl0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKysgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisrICAgIGVsc2UKKysgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisrICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisrICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKysgICAgICBkb25lCisrICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKysgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisrICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisrCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKysJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisrICAgICAgZG8KKysgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisrICAgICAgZG9uZQorKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKysgICAgICB0ZXN0c3RyaW5nPQorKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKysgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrXSkKKytpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChub25lKQorK2ZpCisrbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisrICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKKytdKSMgTFRfQ01EX01BWF9MRU4KKysKKysjIE9sZCBuYW1lOgorK0FVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKysKKysKKysjIF9MVF9IRUFERVJfRExGQ04KKysjIC0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCisrW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKKytdKSMgX0xUX0hFQURFUl9ETEZDTgorKworKworKyMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKKytbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorKyAgWyQ0XQorK2Vsc2UKKysgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKysgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisrICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorK1sjbGluZSAkTElORU5PICJjb25maWd1cmUiCisrI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrCisrI2lmIEhBVkVfRExGQ05fSAorKyNpbmNsdWRlIDxkbGZjbi5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZmRlZiBSVExEX0dMT0JBTAorKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKysjZWxzZQorKyMgIGlmZGVmIERMX0dMT0JBTAorKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKysjICBlbHNlCisrIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKysjICBlbmRpZgorKyNlbmRpZgorKworKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKysgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisrI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisrIyAgaWZkZWYgUlRMRF9MQVpZCisrIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisrIyAgZWxzZQorKyMgICAgaWZkZWYgRExfTEFaWQorKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorKyMgICAgZWxzZQorKyMgICAgICBpZmRlZiBSVExEX05PVworKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisrIyAgICAgIGVsc2UKKysjICAgICAgICBpZmRlZiBETF9OT1cKKysjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworKyMgICAgICAgIGVsc2UKKysjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKysjICAgICAgICBlbmRpZgorKyMgICAgICBlbmRpZgorKyMgICAgZW5kaWYKKysjICBlbmRpZgorKyNlbmRpZgorKworKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKysgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisrI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworKyNlbmRpZgorKworK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorK2ludCBtYWluICgpCisreworKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisrICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKysKKysgIGlmIChzZWxmKQorKyAgICB7CisrICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisrICAgICAgZWxzZQorKyAgICAgICAgeworKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKysgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKysJfQorKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworKyAgICB9CisrICBlbHNlCisrICAgIHB1dHMgKGRsZXJyb3IgKCkpOworKworKyAgcmV0dXJuIHN0YXR1czsKKyt9XQorK19MVF9FT0YKKysgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKysgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAorKyAgICBsdF9zdGF0dXM9JD8KKysgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorKyAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7CisrICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OworKyAgICBlc2FjCisrICBlbHNlIDoKKysgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKysgICAgJDMKKysgIGZpCisrZmkKKytybSAtZnIgY29uZnRlc3QqCisrXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKysKKysKKysjIExUX1NZU19ETE9QRU5fU0VMRgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCisrW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAorK2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisrICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCisrZWxzZQorKyAgbHRfY3ZfZGxvcGVuPW5vCisrICBsdF9jdl9kbG9wZW5fbGlicz0KKysKKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGJlb3MqKQorKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKysgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisrICAgIDs7CisrCisrICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKysgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisrICAgIDs7CisrCisrICBjeWd3aW4qKQorKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKysgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisrICAgIDs7CisrCisrICBkYXJ3aW4qKQorKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKysgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKKysgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKysgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisrICAgIF0pCisrICAgIDs7CisrCisrICAqKQorKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisrCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKysgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorKwkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAorKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKysJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisrCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKysJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKKysJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKysJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisrCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCisrCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorKwkgICAgICBdKQorKwkgICAgXSkKKysJICBdKQorKwldKQorKyAgICAgIF0pCisrICAgIDs7CisrICBlc2FjCisrCisrICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisrICAgIGVuYWJsZV9kbG9wZW49eWVzCisrICBlbHNlCisrICAgIGVuYWJsZV9kbG9wZW49bm8KKysgIGZpCisrCisrICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKysgIGRsb3BlbikKKysgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKysKKysgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorKworKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisrCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisrCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKysJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsCisrCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisrICAgIF0pCisrCisrICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisrCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisrCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKysJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCisrCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisrICAgICAgXSkKKysgICAgZmkKKysKKysgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorKyAgICA7OworKyAgZXNhYworKworKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKysgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKysgIGVzYWMKKysKKysgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKysgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworKyAgZXNhYworK2ZpCisrX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCisrCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKKytfTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAorKwkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCisrX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorKwkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCisrXSkjIExUX1NZU19ETE9QRU5fU0VMRgorKworKyMgT2xkIG5hbWU6CisrQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKKytkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CisrZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCisrCisrCisrIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisrIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KKyttNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCisrW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisrQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCisrICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCisrICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisrICAgbWtkaXIgY29uZnRlc3QKKysgICBjZCBjb25mdGVzdAorKyAgIG1rZGlyIG91dAorKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorKworKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKysgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisrICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisrICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisrICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisrICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisrICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisrICAgYWNfc3RhdHVzPSQ/CisrICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisrICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKysgICB0aGVuCisrICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisrICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisrICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisrICAgICBmaQorKyAgIGZpCisrICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAkUk0gY29uZnRlc3QqCisrICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKysgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisrICAgY2QgLi4KKysgICAkUk0gLXIgY29uZnRlc3QKKysgICAkUk0gY29uZnRlc3QqCisrXSkKKytfTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAorKwlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCisrXSkjIF9MVF9DT01QSUxFUl9DX08KKysKKysKKysjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCisrbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKKytbbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKytfTFRfQ09NUElMRVJfQ19PKFskMV0pCisrCisraGFyZF9saW5rcz0ibm90dGVzdGVkIgorK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisrICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKysgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKysgIGhhcmRfbGlua3M9eWVzCisrICAkUk0gY29uZnRlc3QqCisrICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworKyAgdG91Y2ggY29uZnRlc3QuYQorKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKysgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKysgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisrICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKysgICAgbmVlZF9sb2Nrcz13YXJuCisrICBmaQorK2Vsc2UKKysgIG5lZWRfbG9ja3M9bm8KKytmaQorK19MVF9ERUNMKFtdLCBbbmVlZF9sb2Nrc10sIFsxXSwgW011c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uP10pCisrXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisrCisrCisrIyBfTFRfQ0hFQ0tfT0JKRElSCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmdW4oW19MVF9DSEVDS19PQkpESVJdLAorK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorK1tybSAtZiAubGlicyAyPi9kZXYvbnVsbAorK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCisraWYgdGVzdCAtZCAubGliczsgdGhlbgorKyAgbHRfY3Zfb2JqZGlyPS5saWJzCisrZWxzZQorKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKysgIGx0X2N2X29iamRpcj1fbGlicworK2ZpCisrcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorK29iamRpcj0kbHRfY3Zfb2JqZGlyCisrX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCisrICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCisrbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKKytBQ19ERUZJTkVfVU5RVU9URUQoTFRfT0JKRElSLCAiJGx0X2N2X29iamRpci8iLAorKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKKytdKSMgX0xUX0NIRUNLX09CSkRJUgorKworKworKyMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCisrbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCisrW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCisrX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KKytpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CisrICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKKysgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorKworKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisrICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisrICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisrICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisrICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisrICAgICB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCisrICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisrICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisrICBlbHNlCisrICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisrICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisrICBmaQorK2Vsc2UKKysgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisrICAjIGRpcmVjdG9yaWVzLgorKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorK2ZpCisrQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQorKworK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAorKyAgIHRlc3QgIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSIgPSB5ZXM7IHRoZW4KKysgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKysgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisrICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKysgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKKytmaQorK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAorKyAgICBbSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGVdKQorK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKysKKysKKysjIF9MVF9DTURfU1RSSVBMSUIKKysjIC0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0NNRF9TVFJJUExJQl0sCisrW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKKytzdHJpcGxpYj0KKytvbGRfc3RyaXBsaWI9CisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQorK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisrICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisrICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorK2Vsc2UKKysjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGRhcndpbiopCisrICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisrICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKysgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKysgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorKyAgICBlbHNlCisrICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorKyAgICBmaQorKyAgICA7OworKyAgKikKKysgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorKyAgICA7OworKyAgZXNhYworK2ZpCisrX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQorK19MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCisrXSkjIF9MVF9DTURfU1RSSVBMSUIKKysKKysKKysjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKKyttNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCisrW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKKyttNF9pZihbJDFdLAorKwlbXSwgWworK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKysgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKysgIGVzYWMKKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW1tBLVphLXpdXTpcKSxcMSxnIiA7OworKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworKyAgZXNhYworKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKysgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKysgICpcOyopCisrICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKysgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisrICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKysgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorKyAgICA7OworKyAgKikKKysgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgIDs7CisrICBlc2FjCisrICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisrICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKysgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisrICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisrICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisrICAgIGVsc2UKKysgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKysJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisrICAgIGZpCisrICBkb25lCisrICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCisrQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworKyAgbHRfZm9vPSIiOworKyAgbHRfY291bnQ9MDsKKysgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisrICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKysgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworKyAgICAgICAgbHRfY291bnQrKzsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKysgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBsdF9jb3VudC0tOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgfQorKyAgfQorKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisrICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KKyt9J2AKKysgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisrICBjYXNlICRob3N0X29zIGluCisrICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorKyAgICAgICRTRUQgJ3MsL1woW1tBLVphLXpdXTpcKSxcMSxnJ2AgOzsKKysgIGVzYWMKKysgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKKytlbHNlCisrICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisrZmldKQorK2xpYnJhcnlfbmFtZXNfc3BlYz0KKytsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworK3NvbmFtZV9zcGVjPQorK3NocmV4dF9jbWRzPSIuc28iCisrcG9zdGluc3RhbGxfY21kcz0KKytwb3N0dW5pbnN0YWxsX2NtZHM9CisrZmluaXNoX2NtZHM9CisrZmluaXNoX2V2YWw9Cisrc2hsaWJwYXRoX3Zhcj0KKytzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgorK3ZlcnNpb25fdHlwZT1ub25lCisrZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorK25lZWRfbGliX3ByZWZpeD11bmtub3duCisraGFyZGNvZGVfaW50b19saWJzPW5vCisrCisrIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisrIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCisrbmVlZF92ZXJzaW9uPXVua25vd24KKysKKytjYXNlICRob3N0X29zIGluCisrYWl4MyopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKysgIHNobGlicGF0aF92YXI9TElCUEFUSAorKworKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgIDs7CisrCisrYWl4W1s0LTldXSopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgZWxzZQorKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisrICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKysgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorKyAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKysgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworKwkgICBlY2hvICcgeWVzICcKKysJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKysJOgorKyAgICAgIGVsc2UKKysJY2FuX2J1aWxkX3NoYXJlZD1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisrICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKysgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKysgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisrICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisrICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKysgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisrICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICAgIGVsc2UKKysgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisrICAgIGZpCisrICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorKyAgZmkKKysgIDs7CisrCisrYW1pZ2FvcyopCisrICBjYXNlICRob3N0X2NwdSBpbgorKyAgcG93ZXJwYykKKysgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgICA7OworKyAgbTY4aykKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKysgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKysgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrCisrYmVvcyopCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKysgIDs7CisrCisrYnNkaVtbNDVdXSopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisrICBuZWVkX3ZlcnNpb249bm8KKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisrICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisrICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKysgIDs7CisrCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKysgIHNocmV4dF9jbWRzPSIuZGxsIgorKyAgbmVlZF92ZXJzaW9uPW5vCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKysgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisrICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKysgICAgICBmaScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysKKysgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworK200X2lmKFskMV0sIFtdLFsKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIl0pCisrICAgICAgOzsKKysgICAgbWluZ3cqIHwgY2VnY2MqKQorKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisrICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgICAgOzsKKysgICAgcHczMiopCisrICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisrICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKysgICAgOzsKKysKKysgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKyAgZXNhYworKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisrICBzaGxpYnBhdGhfdmFyPVBBVEgKKysgIDs7CisrCisrZGFyd2luKiB8IHJoYXBzb2R5KikKKysgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorKyAgdmVyc2lvbl90eXBlPWRhcndpbgorKyAgbmVlZF9saWJfcHJlZml4PW5vCisrICBuZWVkX3ZlcnNpb249bm8KKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKysgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisrICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKyttNF9pZihbJDFdLCBbXSxbCisrICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworKyAgOzsKKysKKytkZ3V4KikKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIDs7CisrCisrZnJlZWJzZCogfCBkcmFnb25mbHkqKQorKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisrICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKysgIGVsc2UKKysgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICBmcmVlYnNkW1syM11dLiopIG9iamZvcm1hdD1hb3V0IDs7CisrICAgICopIG9iamZvcm1hdD1lbGYgOzsKKysgICAgZXNhYworKyAgZmkKKysgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKysgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorKyAgICBmcmVlYnNkLWVsZiopCisrICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICAgICAgbmVlZF92ZXJzaW9uPW5vCisrICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisrICAgICAgOzsKKysgICAgZnJlZWJzZC0qKQorKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKysgICAgICA7OworKyAgZXNhYworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGZyZWVic2QyLiopCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgOzsKKysgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKysgICAgOzsKKysgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisrICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKysgICAgOzsKKysgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICAgIDs7CisrICBlc2FjCisrICA7OworKworK2hhaWt1KikKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKysgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgOzsKKysKKytocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKysgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorKyAgdmVyc2lvbl90eXBlPXN1bm9zCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgY2FzZSAkaG9zdF9jcHUgaW4KKysgIGlhNjQqKQorKyAgICBzaHJleHRfY21kcz0nLnNvJworKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisrICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisrICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorKyAgICBlbHNlCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorKyAgICBmaQorKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisrICAgIDs7CisrICBocHBhKjY0KikKKysgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKysgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisrICAgIDs7CisrICAqKQorKyAgICBzaHJleHRfY21kcz0nLnNsJworKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisrICAgIDs7CisrICBlc2FjCisrICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisrICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKysgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisrICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisrICA7OworKworK2ludGVyaXhbWzMtOV1dKikKKysgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgOzsKKysKKytpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisrICAgICopCisrCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKysJZWxzZQorKwkJdmVyc2lvbl90eXBlPWlyaXgKKysJZmkgOzsKKysgIGVzYWMKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKysgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorKyAgICA7OworKyAgKikKKysgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKysgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKysgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKysgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisrICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKysgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgIGVzYWMKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisrICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICA7OworKworKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KKytsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorKyAgZHluYW1pY19saW5rZXI9bm8KKysgIDs7CisrCisrIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysKKysgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorKyAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAorKyAgICBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisrICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCisrCSBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisrICAgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKKysJIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKysgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorKyAgICBdKQorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKysKKysgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisrICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKworKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKysgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisrICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisrICBmaQorKworKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisrICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisrICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKysgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisrICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKysgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKysgIDs7CisrCisrbmV0YnNkZWxmKi1nbnUpCisrICB2ZXJzaW9uX3R5cGU9bGludXgKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKysgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworKyAgOzsKKysKKytuZXRic2QqKQorKyAgdmVyc2lvbl90eXBlPXN1bm9zCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKysgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKysgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworKyAgZWxzZQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKysgIGZpCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworKyAgOzsKKysKKytuZXdzb3M2KQorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgOzsKKysKKysqbnRvKiB8ICpxbngqKQorKyAgdmVyc2lvbl90eXBlPXFueAorKyAgbmVlZF9saWJfcHJlZml4PW5vCisrICBuZWVkX3ZlcnNpb249bm8KKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKysgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKysgIDs7CisrCisrb3BlbmJzZCopCisrICB2ZXJzaW9uX3R5cGU9c3Vub3MKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisrICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKysgIGVzYWMKKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisrICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysJOzsKKysgICAgICAqKQorKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrCTs7CisrICAgICAgZXNhYworKyAgZWxzZQorKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICBmaQorKyAgOzsKKysKKytvczIqKQorKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgIHNocmV4dF9jbWRzPSIuZGxsIgorKyAgbmVlZF9saWJfcHJlZml4PW5vCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisrICA7OworKworK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgIHZlcnNpb25fdHlwZT1vc2YKKysgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgbmVlZF92ZXJzaW9uPW5vCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorKyAgOzsKKysKKytyZG9zKikKKysgIGR5bmFtaWNfbGlua2VyPW5vCisrICA7OworKworK3NvbGFyaXMqKQorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorKyAgbmVlZF9saWJfcHJlZml4PW5vCisrICBuZWVkX3ZlcnNpb249bm8KKysgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKysgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisrICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKysgIDs7CisrCisrc3Vub3M0KikKKysgIHZlcnNpb25fdHlwZT1zdW5vcworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKysgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIGZpCisrICBuZWVkX3ZlcnNpb249eWVzCisrICA7OworKworK3N5c3Y0IHwgc3lzdjQuMyopCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisrICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKysgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKysgICAgc25pKQorKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisrICAgICAgOzsKKysgICAgc2llbWVucykKKysgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgICAgICA7OworKyAgICBtb3Rvcm9sYSkKKysgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgICAgICBuZWVkX3ZlcnNpb249bm8KKysgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworKyAgICAgIDs7CisrICBlc2FjCisrICA7OworKworK3N5c3Y0Kk1QKikKKysgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKysgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKysgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIGZpCisrICA7OworKworK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKysgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisrICBlbHNlCisrICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworKyAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgc2NvMy4ydjUqKQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisrCTs7CisrICAgIGVzYWMKKysgIGZpCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisrICA7OworKworK3RwZiopCisrICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisrICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisrICBuZWVkX2xpYl9wcmVmaXg9bm8KKysgIG5lZWRfdmVyc2lvbj1ubworKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisrICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisrICA7OworKworK3V0czQqKQorKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisrICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKysgIDs7CisrCisrKikKKysgIGR5bmFtaWNfbGlua2VyPW5vCisrICA7OworK2VzYWMKKytBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQorK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisrCisrdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKKytmaQorKworK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisrICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisrZmkKKytpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorK2ZpCisrCisrX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKysgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCisrX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCisrX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCisrX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCisrX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisrICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKKytfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKKytfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKysgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCisrX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKysgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorK19MVF9ERUNMKFtdLCBbaW5zdGFsbF9vdmVycmlkZV9tb2RlXSwgWzFdLAorKyAgICBbUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllc10pCisrX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCisrX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKysgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCisrX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKysgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKysgICAgbm90IHNob3duXV0pCisrX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisrICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKKytfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKysgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCisrX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKysgICAgW1J1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKKytdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorKworKworKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKKytBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKKytbY2FzZSAkTUFHSUNfQ01EIGluCisrW1tcXC8qXSB8ICA/OltcXC9dKl0pCisrICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrICA7OworKyopCisrICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKysgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKKytkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorKyAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgorKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisrICAgIElGUz0iJGx0X3NhdmVfaWZzIgorKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKysgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKysgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisrCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisrCSJmaWxlX21hZ2ljICIqKQorKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKysJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICA6CisrCSAgZWxzZQorKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisrCisrKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKysqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisrKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisrKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisrKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisrKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKysqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworKworK19MVF9FT0YKKysJICBmaSA7OworKwllc2FjCisrICAgICAgZmkKKysgICAgICBicmVhaworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKysgIDs7CisrZXNhY10pCisrTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKKytlbHNlCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisrCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCisrXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisrCisrIyBPbGQgbmFtZToKKytBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorKworKworKyMgX0xUX1BBVEhfTUFHSUMKKysjIC0tLS0tLS0tLS0tLS0tCisrIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCisrW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKytpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCisrICBlbHNlCisrICAgIE1BR0lDX0NNRD06CisrICBmaQorK2ZpCisrXSkjIF9MVF9QQVRIX01BR0lDCisrCisrCisrIyBMVF9QQVRIX0xECisrIyAtLS0tLS0tLS0tCisrIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCisrQUNfREVGVU4oW0xUX1BBVEhfTERdLAorK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisrCisrQUNfQVJHX1dJVEgoW2dudS1sZF0sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisrCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAorKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKysgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKysKKythY19wcm9nPWxkCisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KikKKysgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisrICAqKQorKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisrICBlc2FjCisrICBjYXNlICRhY19wcm9nIGluCisrICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisrICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKysgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKysgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKysgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisrCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorKyAgICAgIGRvbmUKKysgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKysgICAgICA7OworKyAgIiIpCisrICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorKyAgICBhY19wcm9nPWxkCisrICAgIDs7CisrICAqKQorKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisrICAgIHdpdGhfZ251X2xkPXVua25vd24KKysgICAgOzsKKysgIGVzYWMKKytlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCisrZWxzZQorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCisrZmkKKytBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKKytbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKysgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisrICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKysgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisrICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKysgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKysgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworKwk7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisrCTs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrZWxzZQorKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKytmaV0pCisrTEQ9IiRsdF9jdl9wYXRoX0xEIgorK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoJExEKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKyt0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorK19MVF9QQVRIX0xEX0dOVQorK0FDX1NVQlNUKFtMRF0pCisrCisrX0xUX1RBR0RFQ0woW10sIFtMRF0sIFsxXSwgW1RoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXNdKQorK10pIyBMVF9QQVRIX0xECisrCisrIyBPbGQgbmFtZXM6CisrQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCisrQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorK2RubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQorKworKworKyMgX0xUX1BBVEhfTERfR05VCisrIy0gLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKKytbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCisrWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisrICA7OworKyopCisrICBsdF9jdl9wcm9nX2dudV9sZD1ubworKyAgOzsKKytlc2FjXSkKKyt3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKytdKSMgX0xUX1BBVEhfTERfR05VCisrCisrCisrIyBfTFRfQ01EX1JFTE9BRAorKyMgLS0tLS0tLS0tLS0tLS0KKysjIGZpbmQgcmVsb2FkIGZsYWcgZm9yIGxpbmtlcgorKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorK200X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCisrW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKysgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorKyAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisrIiIgfCAiICIqKSA7OworKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworK2VzYWMKKytyZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisrY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworKyAgZGFyd2luKikKKysgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisrICAgIGVsc2UKKysgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisrICAgIGZpCisrICAgIDs7CisrZXNhYworK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKKytfTFRfVEFHREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAorK10pIyBfTFRfQ01EX1JFTE9BRAorKworKworKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcworKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKKyttNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCisrW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKKytBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKKytsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKKytbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCisrbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CisrbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisrIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisrIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKysjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisrIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisrIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisrIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKysKKytjYXNlICRob3N0X29zIGluCisrYWl4W1s0LTldXSopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgOzsKKysKKytiZW9zKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworKworK2JzZGlbWzQ1XV0qKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworKyAgOzsKKysKKytjeWd3aW4qKQorKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisrICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKysgIDs7CisrCisrbWluZ3cqIHwgcHczMiopCisrICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisrICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKysgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisrICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisrICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisrICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworKyAgZWxzZQorKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKysgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworKyAgZmkKKysgIDs7CisrCisrY2VnY2MqKQorKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisrICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisrICA7OworKworK2RhcndpbiogfCByaGFwc29keSopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgOzsKKysKKytmcmVlYnNkKiB8IGRyYWdvbmZseSopCisrICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKysgICAgY2FzZSAkaG9zdF9jcHUgaW4KKysgICAgaSo4NiApCisrICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKysgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKysgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZWxzZQorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgZmkKKysgIDs7CisrCisraGFpa3UqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisrCisraHB1eDEwLjIwKiB8IGhwdXgxMSopCisrICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisrICBjYXNlICRob3N0X2NwdSBpbgorKyAgaWE2NCopCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKysgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKysgICAgOzsKKysgIGhwcGEqNjQqKQorKyAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJ10KKysgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXVwuW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCisrICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrCisraW50ZXJpeFtbMy05XV0qKQorKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKysgIDs7CisrCisraXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgIGNhc2UgJExEIGluCisrICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisrICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKysgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKysgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKysgIGVzYWMKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworKworKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KKytsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisrCisrbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisrICBlbHNlCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworKyAgZmkKKysgIDs7CisrCisrbmV3b3M2KikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKysgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworKyAgOzsKKysKKysqbnRvKiB8ICpxbngqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisrCisrb3BlbmJzZCopCisrICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKysgIGVsc2UKKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKysgIGZpCisrICA7OworKworK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworKworK3Jkb3MqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIDs7CisrCisrc29sYXJpcyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgOzsKKysKKytzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICA7OworKworK3N5c3Y0IHwgc3lzdjQuMyopCisrICBjYXNlICRob3N0X3ZlbmRvciBpbgorKyAgbW90b3JvbGEpCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKKysgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisrICAgIDs7CisrICBuY3IpCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICAgIDs7CisrICBzZXF1ZW50KQorKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworKyAgICA7OworKyAgc25pKQorKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKKysgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisrICAgIDs7CisrICBzaWVtZW5zKQorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgICA7OworKyAgcGMpCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICAgIDs7CisrICBlc2FjCisrICA7OworKworK3RwZiopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgOzsKKytlc2FjCisrXSkKKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKytmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKytkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyt0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKysKKytfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisrICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKysgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKysgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisrXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKysKKysKKysjIExUX1BBVEhfTk0KKysjIC0tLS0tLS0tLS0KKysjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCisrQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKytBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKKytbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrICBsdF9jdl9wYXRoX05NPSIkTk0iCisrZWxzZQorKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisrICBmaQorKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisrICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisrICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKysgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisrCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisrCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKysJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisrCSAgYnJlYWsKKysJICA7OworKwkqKQorKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorKwkgICovZGV2L251bGwqKQorKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKysJICAgIGJyZWFrCisrCSAgICA7OworKwkgICopCisrCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKysJICAgIDs7CisrCSAgZXNhYworKwkgIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIElGUz0iJGx0X3NhdmVfaWZzIgorKyAgZG9uZQorKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CisrZmldKQorK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisrICBOTT0iJGx0X2N2X3BhdGhfTk0iCisrZWxzZQorKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisrICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKysgIGVsc2UKKysgICAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgW2R1bXBiaW4gImxpbmsgLWR1bXAiXSwgOikKKysgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKysgICAgKkNPRkYqKQorKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorKyAgICAgIDs7CisrICAgICopCisrICAgICAgRFVNUEJJTj06CisrICAgICAgOzsKKysgICAgZXNhYworKyAgZmkKKysgIEFDX1NVQlNUKFtEVU1QQklOXSkKKysgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKysgICAgTk09IiREVU1QQklOIgorKyAgZmkKKytmaQorK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KKytBQ19TVUJTVChbTk1dKQorK19MVF9ERUNMKFtdLCBbTk1dLCBbMV0sIFtBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlcl0pZG5sCisrCisrQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKysgIFtsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKysgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisrICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisrICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisrICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKysgIGNhdCBjb25mdGVzdC5vdXQgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0Kl0pCisrXSkjIExUX1BBVEhfTk0KKysKKysjIE9sZCBuYW1lczoKKytBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKKytBVV9BTElBUyhbQUNfUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKKytkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CisrZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCisrZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCisrCisrIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisrIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisrIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCisrW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKKytBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCisrbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQsCisrW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworK10pCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisrICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKKytdKSMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKysKKysKKysjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorK200X2RlZnVuKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSwKKytbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK0FDX0NBQ0hFX0NIRUNLKFtpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2xdLCBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sXSwKKysgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0Kl0pCisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCisrXSkjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKysKKysKKysjIExUX0xJQl9NCisrIyAtLS0tLS0tLQorKyMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQorK0FDX0RFRlVOKFtMVF9MSUJfTV0sCisrW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKytMSUJNPQorK2Nhc2UgJGhvc3QgaW4KKysqLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisrICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKysgIDs7CisrKi1uY3Itc3lzdjQuMyopCisrICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKysgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCisrICA7OworKyopCisrICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorKyAgOzsKKytlc2FjCisrQUNfU1VCU1QoW0xJQk1dKQorK10pIyBMVF9MSUJfTQorKworKyMgT2xkIG5hbWU6CisrQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKytkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKysKKysKKysjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKysKKytfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisrCisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICBudmNjKikKKysgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisrICAqKQorKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7CisrICBlc2FjCisrCisrICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisrICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorKyAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAorKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKKytmaQorK19MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCisrCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKKytdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKysKKysKKysjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCisrW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCisrQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCisrQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisrCisrIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KKytBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCisrWworKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisrCisrIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKysKKysjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KKytzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKysKKysjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorK2Nhc2UgJGhvc3Rfb3MgaW4KKythaXgqKQorKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisrICA7OworK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisrICA7OworK2hwdXgqKQorKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKysgIGZpCisrICA7OworK2lyaXgqIHwgbm9uc3RvcHV4KikKKysgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKysgIDs7Cisrb3NmKikKKysgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisrICA7OworK3NvbGFyaXMqKQorKyAgc3ltY29kZT0nW1tCRFJUXV0nCisrICA7OworK3NjbzMuMnY1KikKKysgIHN5bWNvZGU9J1tbRFRdXScKKysgIDs7Cisrc3lzdjQuMnV3MiopCisrICBzeW1jb2RlPSdbW0RUXV0nCisrICA7OworK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisrICBzeW1jb2RlPSdbW0FCRFRdXScKKysgIDs7Cisrc3lzdjQpCisrICBzeW1jb2RlPSdbW0RGTlNUVV1dJworKyAgOzsKKytlc2FjCisrCisrIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCisrY2FzZSBgJE5NIC1WIDI+JjFgIGluCisrKkdOVSogfCAqJ3dpdGggQkZEJyopCisrICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKKytlc2FjCisrCisrIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKysjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKysjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKysKKysjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrCisrIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisrb3B0X2NyPQorK2Nhc2UgJGJ1aWxkX29zIGluCisrbWluZ3cqKQorKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorKyAgOzsKKytlc2FjCisrCisrIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCisrZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworKworKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKysgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisrCisrICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisrICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKysgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKysgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisrIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisrIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisrIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisrIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKysiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisrIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisrIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisrIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKysiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKysiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKysiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKysgIGVsc2UKKysgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKysgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisrCisrICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKysgIHBpcGVfd29ya3M9bm8KKysKKysgIHJtIC1mIGNvbmZ0ZXN0KgorKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKytjaGFyIG5tX3Rlc3RfdmFyOworK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOworK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KKytfTFRfRU9GCisrCisrICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKysgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKysgICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisrICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKysJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisrICAgICAgZWxzZQorKwlybSAtZiAiJG5saXN0IlQKKysgICAgICBmaQorKworKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKysgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKysJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK19MVF9FT0YKKysJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisrCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKysKKysJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKysKKysvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCisrTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisrICBjb25zdCBjaGFyICpuYW1lOworKyAgdm9pZCAgICAgICAqYWRkcmVzczsKKyt9CisrbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQorK3sKKysgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKKytfTFRfRU9GCisrCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisrCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorKyAgezAsICh2b2lkICopIDB9CisrfTsKKysKKysvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKysjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECisrc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKysgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworK30KKysjZW5kaWYKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrX0xUX0VPRgorKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisrCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKysJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisrCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorKwkgICAgcGlwZV93b3Jrcz15ZXMKKysJICBmaQorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisrCWVsc2UKKysJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisrCWZpCisrICAgICAgZWxzZQorKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICBmaQorKyAgZWxzZQorKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorKworKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisrICAgIGJyZWFrCisrICBlbHNlCisrICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisrICBmaQorK2RvbmUKKytdKQorK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CisrZmkKKytpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoZmFpbGVkKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQob2spCisrZmkKKysKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKysgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCisrX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorKyAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLCBbMV0sCisrICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorKyAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sIFsxXSwKKysgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKKytfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciAkTk1dKQorK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworKworKworKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX0NPTVBJTEVSX1BJQ10sCisrW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKytfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisrCisrbTRfaWYoWyQxXSwgW0NYWF0sIFsKKysgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKysgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisrICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisrCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgYWl4KikKKysgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisrICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIGFtaWdhb3MqKQorKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisrICAgICAgcG93ZXJwYykKKysgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisrICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKysgICAgICAgIDs7CisrICAgICAgbTY4aykKKysgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisrICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisrICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKysgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKysgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrCisrICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKysgICAgICA7OworKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKysgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKysJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisrICAgICAgOzsKKysgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisrICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisrICAgICAgOzsKKysgICAgKmRqZ3BwKikKKysgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisrICAgICAgOzsKKysgICAgaGFpa3UqKQorKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKysgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorKyAgICAgIDs7CisrICAgIGludGVyaXhbWzMtOV1dKikKKysgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorKyAgICAgIDs7CisrICAgIHN5c3Y0Kk1QKikKKysgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBocHV4KikKKysgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKysgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKysgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisrICAgICAgaHBwYSo2NCopCisrCTs7CisrICAgICAgKikKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKysJOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgKnFueCogfCAqbnRvKikKKysgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGVsc2UKKysgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgIGFpeFtbNC05XV0qKQorKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisrCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKwllbHNlCisrCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisrCWZpCisrCTs7CisrICAgICAgY2hvcnVzKikKKysJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysJY3hjaDY4KikKKysJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisrCSAgOzsKKysJZXNhYworKwk7OworKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisrCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKysJbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorKwkgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorKwk7OworKyAgICAgIGRndXgqKQorKwljYXNlICRjY19iYXNlbmFtZSBpbgorKwkgIGVjKysqKQorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKysJICAgIDs7CisrCSAgZ2hjeCopCisrCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworKwkgICAgOzsKKysJICAqKQorKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKysJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworKwk7OworKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorKwljYXNlICRjY19iYXNlbmFtZSBpbgorKwkgIENDKikKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKysJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworKwkgICAgZmkKKysJICAgIDs7CisrCSAgYUNDKikKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKysJICAgIGNhc2UgJGhvc3RfY3B1IGluCisrCSAgICBocHBhKjY0KnxpYTY0KikKKysJICAgICAgIyArWiB0aGUgZGVmYXVsdAorKwkgICAgICA7OworKwkgICAgKikKKysJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysJICAgIDs7CisrCSAgKikKKysJICAgIDs7CisrCWVzYWMKKysJOzsKKysgICAgICBpbnRlcml4KikKKysJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisrCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKysJOzsKKysgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKwljYXNlICRjY19iYXNlbmFtZSBpbgorKwkgIENDKikKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKysJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisrCSAgICA7OworKwkgICopCisrCSAgICA7OworKwllc2FjCisrCTs7CisrICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKysJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysJICBLQ0MqKQorKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworKwkgICAgOzsKKysJICBlY3BjKiApCisrCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisrCSAgICA7OworKwkgIGljcGMqICkKKysJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKysJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworKwkgICAgOzsKKysJICBwZ0NDKiB8IHBnY3BwKikKKysJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKwkgICAgOzsKKysJICBjeHgqKQorKwkgICAgIyBDb21wYXEgQysrCisrCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisrCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworKwkgICAgOzsKKysJICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQorKwkgICAgIyBJQk0gWEwgOC4wLCA5LjAgb24gUFBDIGFuZCBCbHVlR2VuZQorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisrCSAgICA7OworKwkgICopCisrCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKysJICAgICpTdW5cIEMqKQorKwkgICAgICAjIFN1biBDKysgNS45CisrCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisrCSAgICAgIDs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwllc2FjCisrCTs7CisrICAgICAgbHlueG9zKikKKysJOzsKKysgICAgICBtODhrKikKKysJOzsKKysgICAgICBtdnMqKQorKwljYXNlICRjY19iYXNlbmFtZSBpbgorKwkgIGN4eCopCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworKwkgICAgOzsKKysJICAqKQorKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKysJOzsKKysgICAgICAqcW54KiB8ICpudG8qKQorKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKysgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKysgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKysgICAgICAgIDs7CisrICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorKwljYXNlICRjY19iYXNlbmFtZSBpbgorKwkgIEtDQyopCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisrCSAgICA7OworKwkgIFJDQyopCisrCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworKwkgICAgOzsKKysJICBjeHgqKQorKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKysJICAgIDs7CisrCSAgKikKKysJICAgIDs7CisrCWVzYWMKKysJOzsKKysgICAgICBwc29zKikKKysJOzsKKysgICAgICBzb2xhcmlzKikKKysJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysJICBDQyogfCBzdW5DQyopCisrCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisrCSAgICA7OworKwkgIGdjeCopCisrCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworKwkgICAgOzsKKysJICAqKQorKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICAgIHN1bm9zNCopCisrCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisrCSAgQ0MqKQorKwkgICAgIyBTdW4gQysrIDQueAorKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJICAgIDs7CisrCSAgbGNjKikKKysJICAgICMgTHVjaWQKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKysJICAgIDs7CisrCSAgKikKKysJICAgIDs7CisrCWVzYWMKKysJOzsKKysgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorKwljYXNlICRjY19iYXNlbmFtZSBpbgorKwkgIENDKikKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKysJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCSAgICA7OworKwllc2FjCisrCTs7CisrICAgICAgdGFuZGVtKikKKysJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysJICBOQ0MqKQorKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisrCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworKwkgICAgOzsKKysJICAqKQorKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICAgIHZ4d29ya3MqKQorKwk7OworKyAgICAgICopCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKysJOzsKKysgICAgZXNhYworKyAgZmkKKytdLAorK1sKKysgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisrCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICBhaXgqKQorKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKysgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKyAgICAgIGZpCisrICAgICAgOzsKKysKKysgICAgYW1pZ2FvcyopCisrICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKysgICAgICBwb3dlcnBjKQorKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworKyAgICAgICAgOzsKKysgICAgICBtNjhrKQorKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKysgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKysgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworKyAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysKKysgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorKyAgICAgIDs7CisrCisrICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisrICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisrICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKysgICAgICA7OworKworKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKysgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKysgICAgICA7OworKworKyAgICBoYWlrdSopCisrICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisrICAgICAgOzsKKysKKysgICAgaHB1eCopCisrICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisrICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisrICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKysgICAgICBjYXNlICRob3N0X2NwdSBpbgorKyAgICAgIGhwcGEqNjQqKQorKwkjICtaIHRoZSBkZWZhdWx0CisrCTs7CisrICAgICAgKikKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKysJOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysKKysgICAgaW50ZXJpeFtbMy05XV0qKQorKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisrICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisrICAgICAgOzsKKysKKysgICAgbXNkb3NkamdwcCopCisrICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKysgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKysgICAgICA7OworKworKyAgICAqbnRvKiB8ICpxbngqKQorKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisrICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKysgICAgICA7OworKworKyAgICBzeXN2NCpNUCopCisrICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworKyAgICAgIGZpCisrICAgICAgOzsKKysKKysgICAgKikKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1YbGlua2VyICcKKysgICAgICBpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSItWGNvbXBpbGVyICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBlc2FjCisrICBlbHNlCisrICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKysgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICBhaXgqKQorKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrICAgICAgZWxzZQorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisrICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKysgICAgICA7OworKworKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKysgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisrICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKysgICAgICBocHBhKjY0KnxpYTY0KikKKysJIyArWiB0aGUgZGVmYXVsdAorKwk7OworKyAgICAgICopCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisrCTs7CisrICAgICAgZXNhYworKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisrICAgICAgOzsKKysKKysgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKysgICAgICA7OworKworKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisrICAgICAgZWNjKikKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKysgICAgICAgIDs7CisrICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisrICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisrICAgICAgaWNjKiB8IGlmb3J0KikKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKysgICAgICAgIDs7CisrICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKysgICAgICBsZjk1KikKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisrCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCTs7CisrICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKysJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrICAgICAgICA7OworKyAgICAgIGNjYyopCisrICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKysgICAgICAgIDs7CisrICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisrCTs7CisrICAgICAgKikKKysJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisrCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFtbMS03XV0uKiB8ICpTdW4qRm9ydHJhbipcIDguW1swLTNdXSopCisrCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworKwkgIDs7CisrCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKysJICA7OworKwkqU3VuXCBDKikKKysJICAjIFN1biBDIDUuOQorKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysJICA7OworKyAgICAgICAgKkludGVsKlwgW1tDRl1dKkNvbXBpbGVyKikKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKysJICA7OworKwkqUG9ydGxhbmRcIEdyb3VwKikKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKysJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCSAgOzsKKysJZXNhYworKwk7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKworKyAgICBuZXdzb3M2KQorKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysgICAgICA7OworKworKyAgICAqbnRvKiB8ICpxbngqKQorKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisrICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKysgICAgICA7OworKworKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKysgICAgICA7OworKworKyAgICByZG9zKikKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworKyAgICAgIDs7CisrCisrICAgIHNvbGFyaXMqKQorKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworKyAgICAgICopCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrCisrICAgIHN1bm9zNCopCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysgICAgICA7OworKworKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKyAgICAgIDs7CisrCisrICAgIHN5c3Y0Kk1QKikKKysgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKyAgICAgIDs7CisrCisrICAgIHVuaWNvcyopCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworKyAgICAgIDs7CisrCisrICAgIHV0czQqKQorKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKysgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKyAgICAgIDs7CisrCisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGZpCisrXSkKKytjYXNlICRob3N0X29zIGluCisrICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKysgICpkamdwcCopCisrICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKysgICAgOzsKKysgICopCisrICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorKyAgICA7OworK2VzYWMKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCisrICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisrCisrIworKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKysjCisraWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKysgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKysgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisrICAgIFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKysgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorKyAgICAgIiIgfCAiICIqKSA7OworKyAgICAgKikgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKysgICAgIGVzYWNdLAorKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCisrZmkKKytfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisrCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorKworK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisrIworKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKysjCisrd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCisrX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKysgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKysgICRsdF90bXBfc3RhdGljX2ZsYWcsCisrICBbXSwKKysgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKKytfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKysJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorK10pIyBfTFRfQ09NUElMRVJfUElDCisrCisrCisrIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorK200X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCisrW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyttNF9pZihbJDFdLCBbQ1hYXSwgWworKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgYWl4W1s0LTldXSopCisrICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisrICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisrICAgICMgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisrICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgIGVsc2UKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgZmkKKysgICAgOzsKKysgIHB3MzIqKQorKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisrICAgIDs7CisrICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworKyAgICAgIDs7CisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCisrICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisrICAgIDs7CisrICAqKQorKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICA7OworKyAgZXNhYworK10sIFsKKysgIHJ1bnBhdGhfdmFyPQorKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKysgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworKyAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKysgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisrICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisrICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKysgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisrICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKysgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKysgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKysgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisrICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0KKysgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKysgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisrICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisrICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisrICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorKyAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKysgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisrICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisrICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisrICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKysgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisrICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKysgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisrICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorK2RubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgorKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisrCisrICBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKysgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgd2l0aF9nbnVfbGQ9bm8KKysgICAgZmkKKysgICAgOzsKKysgIGludGVyaXgqKQorKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorKyAgICB3aXRoX2dudV9sZD15ZXMKKysgICAgOzsKKysgIG9wZW5ic2QqKQorKyAgICB3aXRoX2dudV9sZD1ubworKyAgICA7OworKyAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCisrICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisrICAgIDs7CisrICBlc2FjCisrCisrICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworKworKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisrICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKysgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCisrICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICBhaXgqKQorKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKysJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKysJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKysJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKKysJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgW1szLTldXSopIDs7CisrCSAgKikKKysJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworKwkgICAgOzsKKysJZXNhYworKwk7OworKyAgICAgICopCisrCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworKwk7OworKyAgICBlc2FjCisrICBmaQorKworKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorKyAgICB3bGFyYz0nJHt3bH0nCisrCisrICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisrICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisrICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisrICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKysgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisrICAgIGVsc2UKKysgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisrICAgIGZpCisrICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKysgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworKyAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisrICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKysgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisrICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKysgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgYWl4W1szLTldXSopCisrICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCWNhdCA8PF9MVF9FT0YgMT4mMgorKworKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAorKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKKysqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisrKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisrCisrX0xUX0VPRgorKyAgICAgIGZpCisrICAgICAgOzsKKysKKysgICAgYW1pZ2FvcyopCisrICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKysgICAgICBwb3dlcnBjKQorKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworKyAgICAgICAgOzsKKysgICAgICBtNjhrKQorKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisrICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKysgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrCisrICAgIGJlb3MqKQorKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKysJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgZWxzZQorKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisrICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisrCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKysJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwllbHNlCisrCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJZml+CisrCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysKKysgICAgaGFpa3UqKQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworKyAgICAgIDs7CisrCisrICAgIGludGVyaXhbWzMtOV1dKikKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKysgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisrICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKysgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisrICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKysgICAgICA7OworKworKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKysgICAgICB0bXBfZGlldD1ubworKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisrCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisrCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKysJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworKyAgICAgIHRoZW4KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisrCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKysgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKysJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworKwkgIDs7CisrCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisrCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisrCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKysJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKysJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisrCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisrCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKysJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKysJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisrCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworKwl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworKwkgIHRtcF9hZGRmbGFnPSA7OworKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKysJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisrCSAgOzsKKysJZXNhYworKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKysJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKysJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKysJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisrCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisrCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworKwllc2FjCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCisrICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisrICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisrCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKyAgICAgICAgZmkKKysKKysJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKysJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisrCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgZmkKKysJICA7OworKwllc2FjCisrICAgICAgZWxzZQorKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysKKysgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisrCXdsYXJjPQorKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKyAgICAgIGZpCisrICAgICAgOzsKKysKKysgICAgc29sYXJpcyopCisrICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisrCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJY2F0IDw8X0xUX0VPRiAxPiYyCisrCisrKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKysqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisrKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisrKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKysqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKysKKytfTFRfRU9GCisrICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgICBlbHNlCisrCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisrICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisrICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCWNhdCA8PF9MVF9FT0YgMT4mMgorKworKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisrKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisrKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisrKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKysqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKysKKytfTFRfRU9GCisrCTs7CisrCSopCisrCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisrCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKysJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJICBlbHNlCisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgZmkKKysJOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysKKysgICAgc3Vub3M0KikKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKyAgICAgIHdsYXJjPQorKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysgICAgICA7OworKworKyAgICAqKQorKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorKyAgICAgIHJ1bnBhdGhfdmFyPQorKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisrICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorKyAgICBmaQorKyAgZWxzZQorKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgYWl4MyopCisrICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisrICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKysgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKysJIyBicm9rZW4gY29sbGVjdDIuCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIGFpeFtbNC05XV0qKQorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKysJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisrCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKysJbm9fZW50cnlfZmxhZz0iIgorKyAgICAgIGVsc2UKKysJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisrCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKysJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisrCSMgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKysJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKysJZWxzZQorKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworKwlmaQorKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisrCisrCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKysJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKysJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisrCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworKwkgICAgYnJlYWsKKysJICBmaQorKwkgIGRvbmUKKysJICA7OworKwllc2FjCisrCisrCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisrCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKysgICAgICBmaQorKworKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKysgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKysgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisrICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisrCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKysgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworKworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKysJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisrCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisrCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisrCSAgdGhlbgorKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorKwkgIDoKKysJICBlbHNlCisrCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKysJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisrCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKysJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKysJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisrCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisrCWZpCisrCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisrICAgICAgZWxzZQorKwkjIG5vdCB1c2luZyBnY2MKKysJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKysJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKysJICBzaGFyZWRfZmxhZz0nLUcnCisrCWVsc2UKKysJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKysJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworKwkgIGVsc2UKKysJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisrCSAgZmkKKysJZmkKKysgICAgICBmaQorKworKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisrICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisrICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKysgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKysJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKysgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKysgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisrICAgICAgZWxzZQorKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKysJZWxzZQorKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisrCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisrCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisrCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKysJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisrCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisrCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKysJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgZWxzZQorKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisrCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKysJICBmaQorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKysJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisrCWZpCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICBhbWlnYW9zKikKKysgICAgICBjYXNlICRob3N0X2NwdSBpbgorKyAgICAgIHBvd2VycGMpCisrICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisrICAgICAgICA7OworKyAgICAgIG02OGspCisrICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworKyAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysKKysgICAgYnNkaVtbNDVdXSopCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKysgICAgICA7OworKworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKysJX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisrCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKwk7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKworKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorKyAgICAgIDs7CisrCisrICAgIGRndXgqKQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgOzsKKysKKysgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisrICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKysgICAgIyBleHRyYSBzcGFjZSkuCisrICAgIGZyZWVic2QyLjIqKQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgOzsKKysKKysgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorKyAgICBmcmVlYnNkMi4qKQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKyAgICAgIDs7CisrCisrICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKysgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysgICAgICA7OworKworKyAgICBocHV4OSopCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrICAgICAgZWxzZQorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysgICAgICBmaQorKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKysKKysgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisrICAgICAgOzsKKysKKysgICAgaHB1eDEwKikKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgZWxzZQorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICBocHV4MTEqKQorKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorKwljYXNlICRob3N0X2NwdSBpbgorKwlocHBhKjY0KikKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICA7OworKwlpYTY0KikKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgOzsKKysJKikKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICA7OworKwllc2FjCisrICAgICAgZWxzZQorKwljYXNlICRob3N0X2NwdSBpbgorKwlocHBhKjY0KikKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgOzsKKysJaWE2NCopCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIDs7CisrCSopCisrCW00X2lmKCQxLCBbXSwgWworKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorKwkgIF9MVF9MSU5LRVJfT1BUSU9OKFtpZiAkQ0MgdW5kZXJzdGFuZHMgLWJdLAorKwkgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX19iLCAkMSksIFstYl0sCisrCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKysJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJ10pXSwKKysJICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKKysJICA7OworKwllc2FjCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrCisrCWNhc2UgJGhvc3RfY3B1IGluCisrCWhwcGEqNjQqfGlhNjQqKQorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKwkgIDs7CisrCSopCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisrCisrCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKysJICA7OworKwllc2FjCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKysJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisrCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKysJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBBQ19MSU5LX0lGRUxTRSgKKysJICAgICBbQUNfTEFOR19TT1VSQ0UoCisrCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSwKKysJCQkgICAgICBbRm9ydHJhbl0sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSldKV0sCisrCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgICBmaQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisrICAgICAgOzsKKysKKysgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisrICAgICAgZWxzZQorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKysgICAgICBmaQorKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKyAgICAgIDs7CisrCisrICAgIG5ld3NvczYpCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysgICAgICA7OworKworKyAgICAqbnRvKiB8ICpxbngqKQorKyAgICAgIDs7CisrCisrICAgIG9wZW5ic2QqKQorKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisrCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworKwllbHNlCisrCSAgY2FzZSAkaG9zdF9vcyBpbgorKwkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisrCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKysJICAgICA7OworKwkgICAqKQorKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysJICAgICA7OworKwkgIGVzYWMKKysJZmkKKysgICAgICBlbHNlCisrCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIG9zMiopCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKysgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisrICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKysgICAgICA7OworKworKyAgICBvc2YzKikKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKyAgICAgIGZpCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKysgICAgICA7OworKworKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKysJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisrCisrCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworKyAgICAgIGZpCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrICAgICAgOzsKKysKKysgICAgc29sYXJpcyopCisrICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKwl3bGFyYz0nJHt3bH0nCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysgICAgICBlbHNlCisrCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorKwkqIkNvbXBpbGVycyA1LjAiKikKKysJICB3bGFyYz0nJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisrCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgIDs7CisrCSopCisrCSAgd2xhcmM9JyR7d2x9JworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKysJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICA7OworKwllc2FjCisrICAgICAgZmkKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisrICAgICAgKikKKysJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKysJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKysJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKysJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKysJZWxzZQorKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKysJZmkKKysJOzsKKysgICAgICBlc2FjCisrICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisrICAgICAgOzsKKysKKysgICAgc3Vub3M0KikKKysgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisrCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKysJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgZWxzZQorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKyAgICAgIGZpCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgOzsKKysKKysgICAgc3lzdjQpCisrICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKysJc25pKQorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKysJOzsKKysJc2llbWVucykKKysJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKysJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKysgICAgICAgIDs7CisrCW1vdG9yb2xhKQorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKysJOzsKKysgICAgICBlc2FjCisrICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgOzsKKysKKysgICAgc3lzdjQuMyopCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisrICAgICAgOzsKKysKKysgICAgc3lzdjQqTVAqKQorKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKysJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKysgICAgICBmaQorKyAgICAgIDs7CisrCisrICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisrICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisrCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisrICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKysgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKysgICAgICAjIGFzIC16IGRlZnMuCisrICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisrICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisrICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKysgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisrCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGVsc2UKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgZmkKKysgICAgICA7OworKworKyAgICB1dHM0KikKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisrICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKyAgICAgIDs7CisrCisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorKyAgICAgIGNhc2UgJGhvc3QgaW4KKysgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKysJOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrICBmaQorK10pCisrQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorK3Rlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKysKKytfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisrCisrX0xUX0RFQ0woW10sIFtsaWJleHRdLCBbMF0sIFtPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIildKWRubAorK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCisrX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKysgICAgW1RoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorKworKyMKKysjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisrIworK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgorK3h8eHllcykKKysgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKysgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKysKKysgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisrICAgIConficqKQorKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKysgICAgICA7OworKyAgICAnJENDICcqKQorKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKysgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKysgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKysgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKKysJW2x0X2N2X11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSksCisrCVskUk0gY29uZnRlc3QqCisrCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorKworKwlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorKwkgIHNvbmFtZT1jb25mdGVzdAorKwkgIGxpYj1jb25mdGVzdAorKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorKwkgIGRlcGxpYnM9CisrCSAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisrCSAgcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisrCSAgbGlua2VyX2ZsYWdzPS12CisrCSAgdmVyc3RyaW5nPQorKwkgIG91dHB1dF9vYmpkaXI9LgorKwkgIGxpYm5hbWU9Y29uZnRlc3QKKysJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisrCSAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKysJICB0aGVuCisrCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKwkgIGVsc2UKKysJICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworKwkgIGZpCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisrCWVsc2UKKysJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKysJZmkKKysJJFJNIGNvbmZ0ZXN0KgorKwldKQorKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0kbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKysgICAgICA7OworKyAgICBlc2FjCisrICBmaQorKyAgOzsKKytlc2FjCisrCisrX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKKysgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorKyAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKKysgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorKyAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCisrX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKysgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCisrX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCisrICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCisrX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorKyAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisrX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKysgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCisrX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQorK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKKytfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCisrX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCisrX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKKysgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCisrX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKysgICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKKytfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKKytfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCisrICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKysgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKKytfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCisrICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKKytfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKysgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisrICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKKytfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKysgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisrICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorKyAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCisrX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKysgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCisrX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKysgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCisrX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisrICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKysgICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKysgICAgYWdhaW5zdCBpdF0pCisrX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorKyAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKysgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKysgICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCisrX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisrICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKKysgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorKyAgICBbU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9sc10pCisrX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisrICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorK19MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKysgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQorK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisrICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorK2RubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKKytkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCisrXSkjIF9MVF9MSU5LRVJfU0hMSUJTCisrCisrCisrIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisrIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisrIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisrbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKKytbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorK2x0X3NhdmVfQ0M9IiRDQyIKKytBQ19MQU5HX1BVU0goQykKKysKKysjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCisrYWNfZXh0PWMKKysKKysjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCisrb2JqZXh0PW8KKytfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKysKKysjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKysKKysjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKysKKytfTFRfVEFHX0NPTVBJTEVSCisrIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisrIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCisrY29tcGlsZXJfREVGQVVMVD0kQ0MKKysKKysjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysKKysjIyBDQVZFQVQgRU1QVE9SOgorKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisrIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKysjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKytpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisrICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKysgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisrICBfTFRfQ09NUElMRVJfQ19PKCQxKQorKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisrICBfTFRfTElOS0VSX1NITElCUygkMSkKKysgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisrICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisrICBMVF9TWVNfRExPUEVOX1NFTEYKKysgIF9MVF9DTURfU1RSSVBMSUIKKysKKysgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorKworKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisrCisrICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKysgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGFpeDMqKQorKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKysgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisrICAgIGZpCisrICAgIDs7CisrCisrICBhaXhbWzQtOV1dKikKKysgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisrCisrICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisrICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKysgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorKworKyAgX0xUX0NPTkZJRygkMSkKKytmaQorK0FDX0xBTkdfUE9QCisrQ0M9IiRsdF9zYXZlX0NDIgorK10pIyBfTFRfTEFOR19DX0NPTkZJRworKworKworKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorK200X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKKytbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisrICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorKyAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKysgIEFDX1BST0dfQ1hYQ1BQCisrZWxzZQorKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCisrZmkKKysKKytBQ19MQU5HX1BVU0goQysrKQorK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKytfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisrX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisrX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisrX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKytfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKytfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKytfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisrX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCisrX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisrX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCisrX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKytfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CisrX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisrCisrIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCisrYWNfZXh0PWNwcAorKworKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorK29iamV4dD1vCisrX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisrCisrIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKysjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisrIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCisraWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKysgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisrICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisrCisrICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JworKworKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorKyAgX0xUX1RBR19DT01QSUxFUgorKworKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKysgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorKworKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKysgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrICBsdF9zYXZlX0xEPSRMRAorKyAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgR0NDPSRHWFgKKysgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisrICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKKysgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKysgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisrICBlbHNlCisrICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorKyAgZmkKKysgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisrICBlbHNlCisrICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECisrICBmaQorKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKysgIENDPSR7Q1hYLSJjKysifQorKyAgQ0ZMQUdTPSRDWFhGTEFHUworKyAgY29tcGlsZXI9JENDCisrICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisrICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisrCisrICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisrICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisrICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworKyAgICBlbHNlCisrICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorKyAgICBmaQorKworKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisrCisrICAgICAgTFRfUEFUSF9MRAorKworKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysKKysgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisrCisrICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKysgICAgICAgIHdsYXJjPScke3dsfScKKysKKysgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKysgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKysJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworKyAgICAgICAgZWxzZQorKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisrICAgICAgICBmaQorKyAgICAgIGVsc2UKKysgICAgICAgIHdpdGhfZ251X2xkPW5vCisrICAgICAgICB3bGFyYz0KKysKKysgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisrICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKysgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKysgICAgICBmaQorKworKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKysgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKysgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKysgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisrCisrICAgIGVsc2UKKysgICAgICBHWFg9bm8KKysgICAgICB3aXRoX2dudV9sZD1ubworKyAgICAgIHdsYXJjPQorKyAgICBmaQorKworKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisrICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKysgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKysgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgIGFpeDMqKQorKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrICAgICAgICA7OworKyAgICAgIGFpeFtbNC05XV0qKQorKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKysgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworKyAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysKKysgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisrICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisrCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKysJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorKwkgICAgICAqLWJydGwqKQorKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisrCSAgICAgICAgYnJlYWsKKysJICAgICAgICA7OworKwkgICAgICBlc2FjCisrCSAgICBkb25lCisrCSAgICA7OworKyAgICAgICAgICBlc2FjCisrCisrICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisrICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKysgICAgICAgIGZpCisrCisrICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisrICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKysgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisrICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisrCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisrICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKysgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisrICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworKworKyAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisrICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKysJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisrCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKysJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorKwkgIHRoZW4KKysJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorKwkgICAgOgorKwkgIGVsc2UKKysJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKysJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKysJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisrCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorKwkgIGZpCisrICAgICAgICAgIGVzYWMKKysgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisrCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisrCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKysJICBmaQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKysgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisrCSAgc2hhcmVkX2ZsYWc9Jy1HJworKyAgICAgICAgICBlbHNlCisrCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKysJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisrCSAgICBlbHNlCisrCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisrCSAgICBmaQorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysKKysgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisrICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKysgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworKwkjIGV4cG9ydC4KKysgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisrICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisrICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKysgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisrICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisrICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisrICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorKworKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKysJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisrICAgICAgICAgIGVsc2UKKysJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKysJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKysJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisrCSAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisrCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisrCSAgICBlbHNlCisrCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKysJICAgIGZpCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisrCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKysJICAgICMgbGlicmFyaWVzLgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICA7OworKworKyAgICAgIGJlb3MqKQorKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWVsc2UKKysJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCWZpCisrCTs7CisrCisrICAgICAgY2hvcnVzKikKKysgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICAgICopCisrCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgICA7OworKworKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorKwksY2wqIHwgbm8sY2wqKQorKwkgICMgTmF0aXZlIE1TVkMKKysJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwkgIGxpYmV4dD1saWIKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJICBzaHJleHRfY21kcz0iLmRsbCIKKysJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZWxzZQorKwkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGZpfgorKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgICAgbGlua25hbWVzPScKKysJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIF9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisrICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorKwk7OworKworKyAgICAgIGRndXgqKQorKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgICAgZWMrKyopCisrCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKysJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJICAgIDs7CisrICAgICAgICAgIGdoY3gqKQorKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKysJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgICAgOzsKKysgICAgICAgICAgKikKKysJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIDs7CisrCisrICAgICAgZnJlZWJzZDIuKikKKysgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKysJIyBzd2l0Y2ggdG8gRUxGCisrICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrICAgICAgICA7OworKworKyAgICAgIGZyZWVic2QtZWxmKikKKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKyAgICAgICAgOzsKKysKKysgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisrICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorKyAgICAgICAgIyBjb252ZW50aW9ucworKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKysgICAgICAgIDs7CisrCisrICAgICAgaGFpa3UqKQorKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKysgICAgICAgIDs7CisrCisrICAgICAgaHB1eDkqKQorKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKysgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKysJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisrCisrICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgICAgICBDQyopCisrICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgIGFDQyopCisrICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorKyAgICAgICAgICAgICMKKysgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisrICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKysgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisrICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisrICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIDs7CisrCisrICAgICAgaHB1eDEwKnxocHV4MTEqKQorKyAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrCisrICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisrICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICopCisrCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBmaQorKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKysgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisrICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisrICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKysJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisrCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrCisrICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgICAgICBDQyopCisrCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKysJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJICAgIDs7CisrICAgICAgICAgIGFDQyopCisrCSAgICBjYXNlICRob3N0X2NwdSBpbgorKwkgICAgICBocHBhKjY0KikKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgOzsKKysJICAgICAgaWE2NCopCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgIDs7CisrCSAgICAgICopCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgOzsKKysJICAgIGVzYWMKKysJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKysJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisrCSAgICAjCisrCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisrCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorKwkgICAgIyBkZXBlbmRlbmNpZXMuCisrCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworKwkgICAgOzsKKysgICAgICAgICAgKikKKysJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisrCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKysJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorKwkgICAgICAgICAgaHBwYSo2NCopCisrCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgOzsKKysJICAgICAgICAgIGlhNjQqKQorKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICA7OworKwkgICAgICAgICAgKikKKysJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICA7OworKwkgICAgICAgIGVzYWMKKysJICAgICAgZmkKKysJICAgIGVsc2UKKysJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJICAgIGZpCisrCSAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysKKysgICAgICBpbnRlcml4W1szLTldXSopCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKysJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisrCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKysJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisrCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKysJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisrCTs7CisrICAgICAgaXJpeDUqIHwgaXJpeDYqKQorKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgICAgQ0MqKQorKwkgICAgIyBTR0kgQysrCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysKKysJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisrCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKysJICAgICMgaW4gdGhlIGFyY2hpdmUuCisrCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKysJICAgIDs7CisrICAgICAgICAgICopCisrCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICBlbHNlCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgZmkKKysJICAgIGZpCisrCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKysJICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisrICAgICAgICA7OworKworKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisrICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgICAgICBLQ0MqKQorKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorKworKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisrCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisrCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKysJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorKwkgICAgIworKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKysJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKysJICAgICMgZGVwZW5kZW5jaWVzLgorKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworKworKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisrCisrCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKysJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKysJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKysJICAgIDs7CisrCSAgaWNwYyogfCBlY3BjKiApCisrCSAgICAjIEludGVsIEMrKworKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisrCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKysJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisrCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKysJICAgICAgKiJWZXJzaW9uIDcuIiopCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQk7OworKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorKwkgICAgICAgIHRtcF9pZHluPQorKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisrCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKysJCWVzYWMKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwkJOzsKKysJICAgIGVzYWMKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisrCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworKwkgICAgOzsKKysgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisrICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKysJICAgIGNhc2UgYCRDQyAtVmAgaW4KKysJICAgICpwZ0NDXCBbWzEtNV1dLiogfCAqcGdjcHBcIFtbMS01XV0uKikKKysJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKysJCXJtIC1yZiAkdHBsZGlyfgorKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKysJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisrCQlybSAtcmYgJHRwbGRpcn4KKysJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisrCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKysJCSRSQU5MSUIgJG9sZGxpYicKKysJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKysJCXJtIC1yZiAkdHBsZGlyfgorKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisrCQlybSAtcmYgJHRwbGRpcn4KKysJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJICAgICAgOzsKKysJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisrCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJICAgICAgOzsKKysJICAgIGVzYWMKKysKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKysgICAgICAgICAgICA7OworKwkgIGN4eCopCisrCSAgICAjIENvbXBhcSBDKysKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKysKKysJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisrCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisrCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisrCisrCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisrCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKysJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorKwkgICAgIworKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKysJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKysJICAgICMgZGVwZW5kZW5jaWVzLgorKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworKwkgICAgOzsKKysJICB4bCogfCBtcGl4bCogfCBiZ3hsKikKKysJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisrCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisrCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisrCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgIGZpCisrCSAgICA7OworKwkgICopCisrCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKysJICAgICpTdW5cIEMqKQorKwkgICAgICAjIFN1biBDKysgNS45CisrCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKysJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCisrCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisrCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKysJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKysKKysJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisrCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKysKKysJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisrCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKysJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKysJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisrCSAgICAgIDs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwllc2FjCisrCTs7CisrCisrICAgICAgbHlueG9zKikKKysgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCTs7CisrCisrICAgICAgbTg4ayopCisrICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKysgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJOzsKKysKKysgICAgICBtdnMqKQorKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgICAgY3h4KikKKysJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgICAgOzsKKysJICAqKQorKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgICA7OworKwllc2FjCisrCTs7CisrCisrICAgICAgbmV0YnNkKikKKysgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisrCSAgd2xhcmM9CisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisrCWZpCisrCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKysJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworKwk7OworKworKyAgICAgICpudG8qIHwgKnFueCopCisrICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworKwk7OworKworKyAgICAgIG9wZW5ic2QyKikKKysgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKysJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwk7OworKworKyAgICAgIG9wZW5ic2QqKQorKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworKwkgIGZpCisrCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorKwllbHNlCisrCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwlmaQorKwk7OworKworKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICAgIEtDQyopCisrCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisrCisrCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisrCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisrCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisrCisrCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKysKKysJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKysJICAgIGNhc2UgJGhvc3QgaW4KKysJICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKysJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworKwkgICAgZXNhYworKwkgICAgOzsKKysgICAgICAgICAgUkNDKikKKysJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisrCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKysJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJICAgIDs7CisrICAgICAgICAgIGN4eCopCisrCSAgICBjYXNlICRob3N0IGluCisrCSAgICAgIG9zZjMqKQorKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysJCTs7CisrCSAgICAgICopCisrCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKysJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisrCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisrCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisrCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworKwkJOzsKKysJICAgIGVzYWMKKysKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKysKKysJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKysJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisrCSAgICAjCisrCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisrCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorKwkgICAgIyBkZXBlbmRlbmNpZXMuCisrCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworKwkgICAgOzsKKysJICAqKQorKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisrCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisrCSAgICAgIGNhc2UgJGhvc3QgaW4KKysJICAgICAgICBvc2YzKikKKysJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJCSAgOzsKKysJICAgICAgICAqKQorKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkJICA7OworKwkgICAgICBlc2FjCisrCisrCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKysKKysJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKysJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisrCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKysKKysJICAgIGVsc2UKKysJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJICAgIGZpCisrCSAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysKKysgICAgICBwc29zKikKKysgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgICAgOzsKKysKKysgICAgICBzdW5vczQqKQorKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgICAgQ0MqKQorKwkgICAgIyBTdW4gQysrIDQueAorKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgICA7OworKyAgICAgICAgICBsY2MqKQorKwkgICAgIyBMdWNpZAorKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgICA7OworKyAgICAgICAgICAqKQorKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysKKysgICAgICBzb2xhcmlzKikKKysgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICAgIENDKiB8IHN1bkNDKikKKysJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKysgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKysJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysKKysJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisrCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorKwkgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworKwkgICAgICAqKQorKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKysJCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisrCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKysJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKysJICAgICAgICA7OworKwkgICAgZXNhYworKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisrCisrCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKysKKysJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisrCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKysJICAgICMgaW4gdGhlIGFyY2hpdmUuCisrCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKysJICAgIDs7CisrICAgICAgICAgIGdjeCopCisrCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworKworKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisrCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisrCSAgICA7OworKyAgICAgICAgICAqKQorKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKysJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKysJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKworKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKysJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKysJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKysJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisrCSAgICAgIGVsc2UKKysJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisrCSAgICAgICAgIyBwbGF0Zm9ybS4KKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKworKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKysJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKysJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKysJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworKwkgICAgICBmaQorKworKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworKwkgICAgICBjYXNlICRob3N0X29zIGluCisrCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworKwkJKikKKysJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisrCQkgIDs7CisrCSAgICAgIGVzYWMKKysJICAgIGZpCisrCSAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysKKysgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKysgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKysgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKysKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgICAgQ0MqKQorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgOzsKKysJKikKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICA7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKworKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisrCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisrCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKysJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisrCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKysJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisrCSMgYXMgLXogZGVmcy4KKysJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisrCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKysJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisrCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKysKKysJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgICAgQ0MqKQorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKysJICAgICAgJyIkX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkiCisrCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisrCSAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKKysJICAgIDs7CisrCSAgKikKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICA7OworKwllc2FjCisrICAgICAgOzsKKysKKysgICAgICB0YW5kZW0qKQorKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgICAgTkNDKikKKysJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgICA7OworKyAgICAgICAgICAqKQorKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysKKysgICAgICB2eHdvcmtzKikKKysgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKyAgICAgICAgOzsKKysKKysgICAgICAqKQorKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisrICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrICAgICAgICA7OworKyAgICBlc2FjCisrCisrICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKysgICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworKworKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgorKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKysKKysgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKysgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKysgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKysgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisrICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisrICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisrICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisrICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKysgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKysgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorKworKyAgICBfTFRfQ09ORklHKCQxKQorKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisrCisrICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworKyAgTERDWFg9JExECisrICBMRD0kbHRfc2F2ZV9MRAorKyAgR0NDPSRsdF9zYXZlX0dDQworKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKysgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKysgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisrICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKysKKytBQ19MQU5HX1BPUAorK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisrCisrCisrIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjCisrIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCisrIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisrIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCisrbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKKytBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrCisrIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKysjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKysjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorK200X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKKytbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisrIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKKytfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CisrX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KKytfTFRfVEFHVkFSKHByZWRlcHMsICQxKT0KKytfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CisrX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKysKKytkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKKytkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorK2RubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKKytkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorK200X2lmKFskMV0sIFtdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKytpbnQgYTsKKyt2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorK19MVF9FT0YKKytdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisrY2xhc3MgRm9vCisreworK3B1YmxpYzoKKysgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorK3ByaXZhdGU6CisrICBpbnQgYTsKKyt9OworK19MVF9FT0YKKytdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBpbXBsaWNpdCBub25lCisrICAgICAgaW50ZWdlcio0IGEKKysgICAgICBhPTAKKysgICAgICByZXR1cm4KKysgICAgICBlbmQKKytfTFRfRU9GCisrXSwgWyQxXSwgW0ZDXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBpbXBsaWNpdCBub25lCisrICAgICAgaW50ZWdlciBhCisrICAgICAgYT0wCisrICAgICAgcmV0dXJuCisrICAgICAgZW5kCisrX0xUX0VPRgorK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKytwdWJsaWMgY2xhc3MgZm9vIHsKKysgIHByaXZhdGUgaW50IGE7CisrICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKysgICAgYSA9IDA7CisrICB9CisrfTsKKytfTFRfRU9GCisrXSwgWyQxXSwgW0dPXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisrcGFja2FnZSBmb28KKytmdW5jIGZvbygpIHsKKyt9CisrX0xUX0VPRgorK10pCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OworK2VzYWMKKysKKytkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisrZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKytpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKysgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorKworKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisrICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisrCisrICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKysKKysgICAgLUwqIHwgLVIqIHwgLWwqKQorKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisrICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisrICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisrCSBwcmV2PSRwCisrCSBjb250aW51ZQorKyAgICAgICBmaQorKworKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKysgICAgICAgICBjYXNlICRwIGluCisrICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgZXNhYworKyAgICAgICBmaQorKyAgICAgICBjYXNlICRwIGluCisrICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgIGVzYWMKKysgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKysJIGNhc2UgJHtwcmV2fSBpbgorKwkgLUwgfCAtUikKKysJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisrCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKysJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisrCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisrCSAgIGVsc2UKKysJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorKwkgICBmaQorKwkgICA7OworKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKysJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorKwkgZXNhYworKyAgICAgICBlbHNlCisrCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorKwkgZWxzZQorKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKysJIGZpCisrICAgICAgIGZpCisrICAgICAgIHByZXY9CisrICAgICAgIDs7CisrCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworKyAgICAqLiRvYmpleHQpCisrICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKysgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisrCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworKwkgY29udGludWUKKysgICAgICAgZmkKKysKKysgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKysJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisrCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisrCSBlbHNlCisrCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKysJIGZpCisrICAgICAgIGVsc2UKKysJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKysJIGVsc2UKKysJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisrCSBmaQorKyAgICAgICBmaQorKyAgICAgICA7OworKworKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKysKKysgICAgZXNhYworKyAgZG9uZQorKworKyAgIyBDbGVhbiB1cC4KKysgIHJtIC1mIGEub3V0IGEuZXhlCisrZWxzZQorKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKKytmaQorKworKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKKytDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisrCisrIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KKyttNF9pZihbJDFdLCBbQ1hYXSwKKytbY2FzZSAkaG9zdF9vcyBpbgorK2ludGVyaXhbWzMtOV1dKikKKysgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKysgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisrICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKysgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKysgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorKyAgOzsKKysKKytsaW51eCopCisrICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKysgICpTdW5cIEMqKQorKyAgICAjIFN1biBDKysgNS45CisrCisrICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKysgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisrICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKysgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworKyAgICBmaQorKyAgICA7OworKyAgZXNhYworKyAgOzsKKysKKytzb2xhcmlzKikKKysgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICBDQyogfCBzdW5DQyopCisrICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKysgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisrICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKysgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrICA7OworK2VzYWMKKytdKQorKworK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKysqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworK2VzYWMKKysgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KKytpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCisrZmkKKytfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKysgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCisrX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKKysgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCisrX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCisrX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCisrX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCisrICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKKytdKSMgX0xUX1NZU19ISURERU5fTElCREVQUworKworKworKyMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKysjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKysjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyttNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCisrW0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQorK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3QgIlgkRjc3IiA9ICJYbm8iOyB0aGVuCisrICBfbHRfZGlzYWJsZV9GNzc9eWVzCisrZmkKKysKKytfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKytfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisrX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisrX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKytfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKytfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKytfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKytfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKytfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKytfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKKytfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisrX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKytfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworKworKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorK2FjX2V4dD1mCisrCisrIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCisrb2JqZXh0PW8KKytfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKysKKysjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisrIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKysjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KKytpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKysgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisrICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKysgICAgICBzdWJyb3V0aW5lIHQKKysgICAgICByZXR1cm4KKysgICAgICBlbmQKKysiCisrCisrICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisrICAgICAgcHJvZ3JhbSB0CisrICAgICAgZW5kCisrIgorKworKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorKyAgX0xUX1RBR19DT01QSUxFUgorKworKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKysgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorKworKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKysgIGx0X3NhdmVfQ0M9IiRDQyIKKysgIGx0X3NhdmVfR0NDPSRHQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKysgIENDPSR7Rjc3LSJmNzcifQorKyAgQ0ZMQUdTPSRGRkxBR1MKKysgIGNvbXBpbGVyPSRDQworKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorKyAgR0NDPSRHNzcKKysgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKysgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisrCisrICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKysgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisrCisrICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisrICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICBhaXgzKikKKysgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisrICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisrICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKysgICAgICAgIGZpCisrICAgICAgICA7OworKyAgICAgIGFpeFtbNC05XV0qKQorKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisrCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKysJZmkKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorKworKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisrICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKysgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorKworKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKysKKysgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKysgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKysgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKysgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisrICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisrICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisrICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKysgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKysgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorKworKyAgICBfTFRfQ09ORklHKCQxKQorKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisrCisrICBHQ0M9JGx0X3NhdmVfR0NDCisrICBDQz0iJGx0X3NhdmVfQ0MiCisrICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKytmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworKworK0FDX0xBTkdfUE9QCisrXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKKysKKysKKysjIF9MVF9MQU5HX0ZDX0NPTkZJRyhbVEFHXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorK1tBQ19MQU5HX1BVU0goRm9ydHJhbikKKysKKytpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KKysgIF9sdF9kaXNhYmxlX0ZDPXllcworK2ZpCisrCisrX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisrX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKytfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKytfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKytfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisrX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisrX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisrX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKytfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisrX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKytfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisrX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKytfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisrX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKKytfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCisrX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KKytfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisrX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKysKKysjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorK2FjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorKworKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCisrb2JqZXh0PW8KKytfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKysKKysjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisrIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisrIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgorK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisrICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisrICAgICAgc3Vicm91dGluZSB0CisrICAgICAgcmV0dXJuCisrICAgICAgZW5kCisrIgorKworKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKysgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorKyAgICAgIHByb2dyYW0gdAorKyAgICAgIGVuZAorKyIKKysKKysgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKysgIF9MVF9UQUdfQ09NUElMRVIKKysKKysgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisrICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKysgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysKKysgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisrICBsdF9zYXZlX0NDPSIkQ0MiCisrICBsdF9zYXZlX0dDQz0kR0NDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrICBDQz0ke0ZDLSJmOTUifQorKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisrICBjb21waWxlcj0kQ0MKKysgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisrCisrICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisrICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisrCisrICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKysgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorKworKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisrICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworKworKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKysgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorKyAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgYWl4MyopCisrICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisrICAgICAgICBmaQorKyAgICAgICAgOzsKKysgICAgICBhaXhbWzQtOV1dKikKKysJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisrCWZpCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKysKKysgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKysgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisrICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKysKKysgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJGFjX2N2X2ZjX2NvbXBpbGVyX2dudSIKKysgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisrCisrICAgICMjIENBVkVBVCBFTVBUT1I6CisrICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisrICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisrICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKysgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisrICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisrICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKysKKysgICAgX0xUX0NPTkZJRygkMSkKKysgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorKworKyAgR0NDPSRsdF9zYXZlX0dDQworKyAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKytmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisrCisrQUNfTEFOR19QT1AKKytdKSMgX0xUX0xBTkdfRkNfQ09ORklHCisrCisrCisrIyBfTFRfTEFOR19HQ0pfQ09ORklHKFtUQUddKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisrIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKKytbQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAorK0FDX0xBTkdfU0FWRQorKworKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KKythY19leHQ9amF2YQorKworKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KKytvYmpleHQ9bworK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorKworKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisrbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisrCisrIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKytsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisrCisrIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorK19MVF9UQUdfQ09NUElMRVIKKysKKysjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysKKysjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorK2x0X3NhdmVfQ0M9JENDCisrbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworK2x0X3NhdmVfR0NDPSRHQ0MKKytHQ0M9eWVzCisrQ0M9JHtHQ0otImdjaiJ9CisrQ0ZMQUdTPSRHQ0pGTEFHUworK2NvbXBpbGVyPSRDQworK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKytfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKytfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisrCisrIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKworK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCisrX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKysKKysjIyBDQVZFQVQgRU1QVE9SOgorKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisrIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKysjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKytpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisrICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKysgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisrICBfTFRfQ09NUElMRVJfQ19PKCQxKQorKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisrICBfTFRfTElOS0VSX1NITElCUygkMSkKKysgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKysKKysgIF9MVF9DT05GSUcoJDEpCisrZmkKKysKKytBQ19MQU5HX1JFU1RPUkUKKysKKytHQ0M9JGx0X3NhdmVfR0NDCisrQ0M9JGx0X3NhdmVfQ0MKKytDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisrXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKysKKysKKysjIF9MVF9MQU5HX0dPX0NPTkZJRyhbVEFHXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgR28gY29tcGlsZXIKKysjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisrIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisrbTRfZGVmdW4oW19MVF9MQU5HX0dPX0NPTkZJR10sCisrW0FDX1JFUVVJUkUoW0xUX1BST0dfR09dKWRubAorK0FDX0xBTkdfU0FWRQorKworKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBHbyB0ZXN0IHNvdXJjZXMuCisrYWNfZXh0PWdvCisrCisrIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEdvIHRlc3Qgc291cmNlcy4KKytvYmpleHQ9bworK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorKworKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisrbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfSIKKysKKysjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0nCisrCisrIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorK19MVF9UQUdfQ09NUElMRVIKKysKKysjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysKKysjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorK2x0X3NhdmVfQ0M9JENDCisrbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworK2x0X3NhdmVfR0NDPSRHQ0MKKytHQ0M9eWVzCisrQ0M9JHtHT0MtImdjY2dvIn0KKytDRkxBR1M9JEdPRkxBR1MKKytjb21waWxlcj0kQ0MKKytfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisrX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisrX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorKworKyMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworKworK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCisrX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKysKKysjIyBDQVZFQVQgRU1QVE9SOgorKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisrIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKysjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKytpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisrICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKysgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisrICBfTFRfQ09NUElMRVJfQ19PKCQxKQorKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisrICBfTFRfTElOS0VSX1NITElCUygkMSkKKysgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKysKKysgIF9MVF9DT05GSUcoJDEpCisrZmkKKysKKytBQ19MQU5HX1JFU1RPUkUKKysKKytHQ0M9JGx0X3NhdmVfR0NDCisrQ0M9JGx0X3NhdmVfQ0MKKytDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisrXSkjIF9MVF9MQU5HX0dPX0NPTkZJRworKworKworKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKysjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyttNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKKytbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCisrQUNfTEFOR19TQVZFCisrCisrIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KKythY19leHQ9cmMKKysKKysjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorK29iamV4dD1vCisrX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisrCisrIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKytsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCisrCisrIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKytsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisrCisrIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorK19MVF9UQUdfQ09NUElMRVIKKysKKysjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKysKKysjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorK2x0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrbHRfc2F2ZV9HQ0M9JEdDQworK0dDQz0KKytDQz0ke1JDLSJ3aW5kcmVzIn0KKytDRkxBR1M9CisrY29tcGlsZXI9JENDCisrX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKytfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisrCisraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorKyAgOgorKyAgX0xUX0NPTkZJRygkMSkKKytmaQorKworK0dDQz0kbHRfc2F2ZV9HQ0MKKytBQ19MQU5HX1JFU1RPUkUKKytDQz0kbHRfc2F2ZV9DQworK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKytdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisrCisrCisrIyBMVF9QUk9HX0dDSgorKyMgLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorK1ttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAorKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisrICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCisrICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCisrXSkKKysKKysjIE9sZCBuYW1lOgorK0FVX0FMSUFTKFtMVF9BQ19QUk9HX0dDSl0sIFtMVF9QUk9HX0dDSl0pCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKysKKysKKysjIExUX1BST0dfR08KKysjIC0tLS0tLS0tLS0KKytBQ19ERUZVTihbTFRfUFJPR19HT10sCisrW0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbywpCisrXSkKKysKKysKKysjIExUX1BST0dfUkMKKysjIC0tLS0tLS0tLS0KKytBQ19ERUZVTihbTFRfUFJPR19SQ10sCisrW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorK10pCisrCisrIyBPbGQgbmFtZToKKytBVV9BTElBUyhbTFRfQUNfUFJPR19SQ10sIFtMVF9QUk9HX1JDXSkKKytkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CisrZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisrCisrCisrIyBfTFRfREVDTF9FR1JFUAorKyMgLS0tLS0tLS0tLS0tLS0KKysjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisrIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KKyttNF9kZWZ1bihbX0xUX0RFQ0xfRUdSRVBdLAorK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKKyt0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisrX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCisrX0xUX0RFQ0woW10sIFtGR1JFUF0sIFsxXSwgW0EgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlcl0pCisrZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KKytBQ19TVUJTVChbR1JFUF0pCisrXSkKKysKKysKKysjIF9MVF9ERUNMX09CSkRVTVAKKysjIC0tLS0tLS0tLS0tLS0tCisrIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCisrbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQorK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKytfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCisrQUNfU1VCU1QoW09CSkRVTVBdKQorK10pCisrCisrIyBfTFRfREVDTF9ETExUT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCisrbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKytfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCisrQUNfU1VCU1QoW0RMTFRPT0xdKQorK10pCisrCisrIyBfTFRfREVDTF9TRUQKKysjIC0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKysjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCisrbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCisrW0FDX1BST0dfU0VECisrdGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKKytfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorK19MVF9ERUNMKFtdLCBbWHNlZF0sIFsiXCRTRUQgLWUgMXMvXlgvLyJdLAorKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorK10pIyBfTFRfREVDTF9TRUQKKysKKyttNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK200X2RlZnVuKFtBQ19QUk9HX1NFRF0sCisrW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKKytBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCisrWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisrICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrbHRfYWNfbWF4PTAKKytsdF9hY19jb3VudD0wCisrIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKysjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworKyAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKysgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorKyAgbHRfYWNfY291bnQ9MAorKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisrICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisrICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKysgICAgYnJlYWsKKysgIGZpCisrICB3aGlsZSB0cnVlOyBkbworKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKysgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKysgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisrICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisrICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKysgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisrICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorKyAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKysgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisrICAgIGZpCisrICBkb25lCisrZG9uZQorK10pCisrU0VEPSRsdF9jdl9wYXRoX1NFRAorK0FDX1NVQlNUKFtTRURdKQorK0FDX01TR19SRVNVTFQoWyRTRURdKQorK10pI0FDX1BST0dfU0VECisrXSkjbTRfaWZuZGVmCisrCisrIyBPbGQgbmFtZToKKytBVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQorK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKytkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisrCisrCisrIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQorKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisreHNpX3NoZWxsPW5vCisrKCBfbHRfZHVtbXk9ImEvYi9jIgorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisrICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisrICAmJiB4c2lfc2hlbGw9eWVzCisrQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCisrX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorKworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCisrbHRfc2hlbGxfYXBwZW5kPW5vCisrKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJFsxXSs9XCRbMl0iICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorKyAgICA+L2Rldi9udWxsIDI+JjEgXAorKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworK0FDX01TR19SRVNVTFQoWyRsdF9zaGVsbF9hcHBlbmRdKQorK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKKysKKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGx0X3Vuc2V0PXVuc2V0CisrZWxzZQorKyAgbHRfdW5zZXQ9ZmFsc2UKKytmaQorK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKysKKysjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCisrY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisrICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworKyAgOzsKKysgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisrICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKysgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworKyAgOzsKKytlc2FjCisrX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCisrX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCisrXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworKworKworKyMgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRSAoRlVOQ05BTUUsIFJFUExBQ0VNRU5ULUJPRFkpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEluIGAkY2ZnZmlsZScsIGxvb2sgZm9yIGZ1bmN0aW9uIEZVTkNOQU1FIGRlbGltaXRlZCBieSBgXkZVTkNOQU1FICgpJCcgYW5kCisrIyAnXn0gRlVOQ05BTUUgJywgYW5kIHJlcGxhY2UgaXRzIGJvZHkgd2l0aCBSRVBMQUNFTUVOVC1CT0RZLgorK200X2RlZnVuKFtfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFXSwKKytbZG5sIHsKKytzZWQgLWUgJy9eJDEgKCkkLywvXn0gIyAkMSAvY1wKKyskMSAoKVwKKyt7XAorK200X2JwYXRzdWJzdHMoWyQyXSwgWyRdLCBbXFxdLCBbXlwoWwkgXVwpXSwgW1xcXDFdKQorK30gIyBFeHRlbmRlZC1zaGVsbCAkMSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK10pCisrCisrCisrIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisrIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KKyttNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCisrW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWNdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisrCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKysgICAgZXNhYworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKysKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3RyaXBuYW1lXSwgW2RubAorKyAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisrICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKysgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKysgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKysgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1dKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworKyAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworKyAgICBlc2FjXSkKKysKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfeGZvcm1dLCBbICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9dKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF0sIFsgICAgZXZhbCAiJHsxfSs9XFwkezJ9Il0pCisrCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF9xdW90ZWRdLCBbZG5sCisrICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisrZG5sIG00IGV4cGFuc2lvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCB0aGVuIHRoZSBzaGVsbCBldmFsIHR1cm5zIHRoYXQgaW50byBcCisrICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXSkKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKKytmaQorK10pCisrCisrIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKysjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKysjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KKyttNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKKytBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCisrW2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworK10pCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisrCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKKytBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKKytbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrXSkKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworZGlmZiAtLWdpdCBhL200L2x0b3B0aW9ucy5tNCBiL200L2x0b3B0aW9ucy5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVkOWFjZDgKKy0tLSAvZGV2L251bGwKKysrKyBiL200L2x0b3B0aW9ucy5tNAorQEAgLTAsMCArMSwzODQgQEAKKysjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgIEluYy4KKysjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisrIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysKKysjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorKworKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCisrQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorKworKworKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKKytbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisrCisrCisrIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKKysjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisrIyBzYXZlZCBhcyBhIGZsYWcuCisrbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCisrW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKKyttNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorKyAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKysgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKKytdKQorKworKworKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCisrW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCisrCisrCisrIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisrIyBhcmUgc2V0LgorK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKKytbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisrCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCisrCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCisrbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCisrXSlbXWRubAorK10pCisrCisrCisrIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCisrIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisrIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCisrbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCisrWyMgU2V0IG9wdGlvbnMKKyttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKysgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKysKKyttNF9pZihbJDFdLFtMVF9JTklUXSxbCisrICBkbmwKKysgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorKyAgZG5sIHNwZWNpZmllZDoKKysgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworKyAgXSkKKysgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubworKyAgXSkKKysgIGRubAorKyAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KKysgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisrICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorKyAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CisrICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKysgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQorKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisrICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisrICBdKQorK10pIyBfTFRfU0VUX09QVElPTlMKKysKKysKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCisrW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisrCisrCisrIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyttNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorK10pIyBMVF9PUFRJT05fREVGSU5FCisrCisrCisrIyBkbG9wZW4KKysjIC0tLS0tLQorK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCisrXSkKKysKKytBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQorK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCisrWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorK3B1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorK10pCisrCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKysKKysKKysjIHdpbjMyLWRsbAorKyMgLS0tLS0tLS0tCisrIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCisrTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorK1tlbmFibGVfd2luMzJfZGxsPXllcworKworK2Nhc2UgJGhvc3QgaW4KKysqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorKyAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQorKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKysgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisrICA7OworK2VzYWMKKysKKyt0ZXN0IC16ICIkQVMiICYmIEFTPWFzCisrX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKytfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisrCisrdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCisrXSkjIHdpbjMyLWRsbAorKworK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCisrW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKytfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQorK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCisrWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorK3B1dCB0aGUgYHdpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorK10pCisrCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKysKKysKKysjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgYHNoYXJlZCcgYW5kCisrIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKysjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KKyttNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKKytbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkQDw6QD1QS0dTQDo+QF0sCisrCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisrICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKysgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworKyAgICAqKQorKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKysgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisrICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisrICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworKwlJRlM9IiRsdF9zYXZlX2lmcyIKKysJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKysJICBlbmFibGVfc2hhcmVkPXllcworKwlmaQorKyAgICAgIGRvbmUKKysgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKysgICAgICA7OworKyAgICBlc2FjXSwKKysgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisrCisrICAgIF9MVF9ERUNMKFtidWlsZF9saWJ0b29sX2xpYnNdLCBbZW5hYmxlX3NoYXJlZF0sIFswXSwKKysJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorK10pIyBfTFRfRU5BQkxFX1NIQVJFRAorKworK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCisrTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCisrCisrIyBPbGQgbmFtZXM6CisrQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3NoYXJlZF0pCisrXSkKKysKKytBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCisrXSkKKysKKytBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCisrQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCisrCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbXSkKKysKKysKKysKKysjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgc3RhdGljJyBhbmQKKysjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorK200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAorK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCisrQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKysJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKysgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisrICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisrICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisrICAgICopCisrICAgICBlbmFibGVfc3RhdGljPW5vCisrICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKysJSUZTPSIkbHRfc2F2ZV9pZnMiCisrCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisrCSAgZW5hYmxlX3N0YXRpYz15ZXMKKysJZmkKKysgICAgICBkb25lCisrICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrICAgICAgOzsKKysgICAgZXNhY10sCisrICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorKworKyAgICBfTFRfREVDTChbYnVpbGRfb2xkX2xpYnNdLCBbZW5hYmxlX3N0YXRpY10sIFswXSwKKysJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorK10pIyBfTFRfRU5BQkxFX1NUQVRJQworKworK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCisrTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisrCisrIyBPbGQgbmFtZXM6CisrQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3N0YXRpY10pCisrXSkKKysKKytBQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCisrXSkKKysKKytBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCisrQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisrCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbXSkKKysKKysKKysKKysjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgZmFzdC1pbnN0YWxsJworKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorK200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCisrQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKysgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKysgICAgY2FzZSAkZW5hYmxldmFsIGluCisrICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKysgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKysgICAgKikKKysgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisrICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKysJSUZTPSIkbHRfc2F2ZV9pZnMiCisrCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisrCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKysJZmkKKysgICAgICBkb25lCisrICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisrICAgICAgOzsKKysgICAgZXNhY10sCisrICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorKworK19MVF9ERUNMKFtmYXN0X2luc3RhbGxdLCBbZW5hYmxlX2Zhc3RfaW5zdGFsbF0sIFswXSwKKysJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorKworK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCisrTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisrCisrIyBPbGQgbmFtZXM6CisrQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCisrQUNfRElBR05PU0UoW29ic29sZXRlXSwKKytbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAorK3RoZSBgZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCisrXSkKKysKKytBVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAorK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCisrQUNfRElBR05PU0UoW29ic29sZXRlXSwKKytbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAorK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKKytdKQorKworK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKytkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKytkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwgW10pCisrCisrCisrIyBfTFRfV0lUSF9QSUMoW01PREVdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKysjIExUX0lOSVQgb3B0aW9ucy4KKysjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCisrbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorK1tBQ19BUkdfV0lUSChbcGljXSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljQDw6QD1QS0dTQDo+QF0sCisrCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCisrICAgIFtsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorKyAgICBjYXNlICR3aXRodmFsIGluCisrICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKysgICAgKikKKysgICAgICBwaWNfbW9kZT1kZWZhdWx0CisrICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorKyAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCisrCUlGUz0iJGx0X3NhdmVfaWZzIgorKwlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgorKwkgIHBpY19tb2RlPXllcworKwlmaQorKyAgICAgIGRvbmUKKysgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKysgICAgICA7OworKyAgICBlc2FjXSwKKysgICAgW3BpY19tb2RlPWRlZmF1bHRdKQorKworK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisrCisrX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKKytdKSMgX0xUX1dJVEhfUElDCisrCisrTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKKytMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorKworKyMgT2xkIG5hbWU6CisrQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCisrW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKKytBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKKytwdXQgdGhlIGBwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorK10pCisrCisrZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisrCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisrCisrbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCisrTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisrCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCisrTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisrCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCisrTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKysKKyttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKKytMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCisrTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKysJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQorZGlmZiAtLWdpdCBhL200L2x0c3VnYXIubTQgYi9tNC9sdHN1Z2FyLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTAwMGEwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbHRzdWdhci5tNAorQEAgLTAsMCArMSwxMjMgQEAKKysjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorKyMKKysjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKysjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisrCisrIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KKytBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisrCisrCisrIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisrIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKysjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKKysjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCisrbTRfZGVmaW5lKFtsdF9qb2luXSwKKytbbTRfaWYoWyQjXSwgWzFdLCBbXSwKKysgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisrICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisrbTRfZGVmaW5lKFtfbHRfam9pbl0sCisrW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKysgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisrCisrCisrIyBsdF9jYXIoTElTVCkKKysjIGx0X2NkcihMSVNUKQorKyMgLS0tLS0tLS0tLS0tCisrIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorKyMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAorKyMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCisrbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCisrbTRfZGVmaW5lKFtsdF9jZHJdLAorK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorKyAgICAgICBbJCNdLCAxLCBbXSwKKysgICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQorK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorKworKworKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgorKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisrIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKKysjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorKyMKKysjIFRoaXMgbWFjcm8gaXMgbmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIEF1dG9jb25mIDIuNjIsIHNpbmNlIGVhcmxpZXIKKysjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCisrbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorK1ttNF9kZWZpbmUoWyQxXSwKKysJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisrCisrCisrCisrIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisrIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisrIyBoYXMgdGhlIGZvcm0gUFJFRklYbUlORklYU1VGRklYbi4KKysjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCisrbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKKytbbTRfaWYobTRfZXZhbChbJCMgPiAzXSksIFsxXSwKKysgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisrCSAgICAgW200X2ZvcmVhY2goW19MdF9zdWZmaXhdLAorKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisrCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKysKKysKKysjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCisrbTRfZGVmaW5lKFtsdF9pZl9hcHBlbmRfdW5pcV0sCisrW200X2lmZGVmKFskMV0sCisrCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorKwkJIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sCisrCQkgWyQ1XSldLAorKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKysKKysKKysjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKysKKysKKysjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKKytbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisrCisrCisrIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKKytbbTRfaWZ2YWwoWyQzXSwKKysJbTRfaWZkZWYoWyQxKCQyOiQzKV0sIFttNF9kZWZuKFskMSgkMjokMyldKV0pLAorKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKysKKysKKysjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbbHRfaWZfZGljdF9mZXRjaF0sCisrW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisrCVskNV0sCisrICAgIFskNl0pXSkKKysKKysKKysjIGx0X2RpY3RfZmlsdGVyKERJQ1QsIFtTVUJLRVldLCBWQUxVRSwgW1NFUEFSQVRPUl0sIEtFWSwgWy4uLl0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorK1ttNF9pZihbJDVdLCBbXSwgW10sCisrICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKysJCSAgICAgIFtsdF9pZl9kaWN0X2ZldGNoKFskMV0sIF9MdF9rZXksIFskMl0sIFskM10sIFtfTHRfa2V5IF0pXSkpKSkpXSlbXWRubAorK10pCitkaWZmIC0tZ2l0IGEvbTQvbHR2ZXJzaW9uLm00IGIvbTQvbHR2ZXJzaW9uLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDdhODYwMgorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbHR2ZXJzaW9uLm00CitAQCAtMCwwICsxLDIzIEBACisrIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorKyMKKysjICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisrIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysKKysjIEBjb25maWd1cmVfaW5wdXRACisrCisrIyBzZXJpYWwgMzMzNyBsdHZlcnNpb24ubTQKKysjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sCisrCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjJdKQorK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMzMzddKQorKworK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCisrW21hY3JvX3ZlcnNpb249JzIuNC4yJworK21hY3JvX3JldmlzaW9uPScxLjMzMzcnCisrX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCisrX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKKytdKQorZGlmZiAtLWdpdCBhL200L2x0fm9ic29sZXRlLm00IGIvbTQvbHR+b2Jzb2xldGUubTQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNTczZGE5CistLS0gL2Rldi9udWxsCisrKysgYi9tNC9sdH5vYnNvbGV0ZS5tNAorQEAgLTAsMCArMSw5OCBAQAorKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorKyMKKysjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKysjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorKworKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorKyMKKysjIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKQorKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisrIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorKyMKKysjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKysjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKysjIHVzaW5nIGEgbWFjcm8gd2l0aCB0aGUgc2FtZSBuYW1lIGluIG91ciBsb2NhbCBtNC9saWJ0b29sLm00IGl0J2xsCisrIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKysjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisrIworKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisrIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKysjIEFDX0RFRlVOcyBpdCB3YW50cywgYnV0IHdoZW4gbTQgcHJvY2Vzc2VzIGl0LCBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCisrIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisrIworKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisrIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorKyMgd2UgZ2l2ZSB1cCBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgYmVmb3JlIDEuNywgYXQgd2hpY2ggcG9pbnQKKysjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorKworKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCisrQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKysKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSldKQorK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfU0hFTExfSU5JVF0sCQlbQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSldKQorK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKKyttNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKKyttNF9pZm5kZWYoW19MVF9BQ19UQUdWQVJdLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSldKQorK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKKyttNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKKyttNF9pZm5kZWYoW19MVF9BQ19TWVNfQ09NUElMRVJdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfQ09NUElMRVJdKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorK200X2lmbmRlZihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCVtBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCisrbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9PQkpESVJdKV0pCisrbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdKV0pCisrbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKKyttNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCisrbTRfaWZuZGVmKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSldKQorK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdKV0pCisrbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdKV0pCisrbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKKyttNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCisrbTRfaWZuZGVmKFtfTFRfQ0NfQkFTRU5BTUVdLAkJW0FDX0RFRlVOKFtfTFRfQ0NfQkFTRU5BTUVdKV0pCisrbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKKyttNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCisrbTRfaWZuZGVmKFtfQUNfUFJPR19MSUJUT09MXSwJCVtBQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSldKQorK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCisrbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhdKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCisrbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10pXSkKKyttNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKKyttNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddKV0pCisrbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10pXSkKKyttNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCisrbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorK200X2lmbmRlZihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLAlbQUNfREVGVU4oW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSldKQorK200X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQorK200X2lmbmRlZihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAlbQUNfREVGVU4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSldKQorK200X2lmbmRlZihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAlbQUNfREVGVU4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSldKQorK200X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQorK200X2lmbmRlZihbX0xUX1BST0dfRkNdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GQ10pXSkKKyttNF9pZm5kZWYoW19MVF9QUk9HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0NYWF0pXSkKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbiBiL3Rlc3RzL01ha2VmaWxlLmluCitpbmRleCA1NTFlZTA0Li4wNmVmMWI0IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuaW4KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmluCitAQCAtMSw4ICsxLDggQEAKKy0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwLjEgZnJvbSBNYWtlZmlsZS5hbS4KKysjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE0LjEgZnJvbSBNYWtlZmlsZS5hbS4KKyAjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCistIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorQEAgLTE0LDkgKzE0LDU1IEBACisgCisgQFNFVF9NQUtFQAorIFZQQVRIID0gQHNyY2RpckAKKythbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCisrYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKysgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKysgICAgICA/KSA7OyBcCisrICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKysgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisrICAgICAgICAgZXhpdCAxOzsgXAorKyAgZXNhYzsgXAorKyAgaGFzX29wdD1ubzsgXAorKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKysgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisrICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisrICBlbHNlIFwKKysgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCisrICAgICAgKlxcW1wgXAldKikgXAorKyAgICAgICAgYnM9XFw7IFwKKysgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKKysgICAgZXNhYzsgXAorKyAgZmk7IFwKKysgIHNraXBfbmV4dD1ubzsgXAorKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorKyAgeyBcCisrICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisrICB9OyBcCisrICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKysgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKysgICAgY2FzZSAkJGZsZyBpbiBcCisrICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisrICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisrICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKysgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisrICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKysgICAgZXNhYzsgXAorKyAgICBjYXNlICQkZmxnIGluIFwKKysgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorKyAgICBlc2FjOyBcCisrICBkb25lOyBcCisrICB0ZXN0ICQkaGFzX29wdCA9IHllcworK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCisrYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACisgcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACisrcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKKyBpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAorIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK0BAIC0zMywzOCArNzksOTIgQEAgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUBjaGVja19QUk9HUkFNUyA9IGRhdGVfdGVzdCQoRVhFRVhUKQorIHN1YmRpciA9IHRlc3RzCistRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCisrRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKysJJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycyBcCisrCSQodG9wX3NyY2RpcikvY29uZmlnL2RlcGNvbXAKKyBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CisgYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWNpbmNsdWRlLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKysJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKKysJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisgCSQoQUNMT0NBTF9NNCkKKyBta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvbWtpbnN0YWxsZGlycworIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jb25maWcuaAorIENPTkZJR19DTEVBTl9GSUxFUyA9CisrQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KKyBhbV9kYXRlX3Rlc3RfT0JKRUNUUyA9IGRhdGVfdGVzdC4kKE9CSkVYVCkKKyBkYXRlX3Rlc3RfT0JKRUNUUyA9ICQoYW1fZGF0ZV90ZXN0X09CSkVDVFMpCisgZGF0ZV90ZXN0X0RFUEVOREVOQ0lFUyA9ICR7dG9wX2J1aWxkZGlyfS9saWJDb3JlRm91bmRhdGlvbi5sYQorK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKKythbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2x0XzAgPSAtLXNpbGVudAorK2FtX192X2x0XzEgPSAKKytBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X1BfMCA9IGZhbHNlCisrYW1fX3ZfUF8xID0gOgorK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKKythbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKKythbV9fdl9HRU5fMSA9IAorK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKKythbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X2F0XzAgPSBACisrYW1fX3ZfYXRfMSA9IAorIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUKKyBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCisrYW1fX212ID0gbXYgLWYKKyBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKyAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCistCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKKytMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKysJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKysJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKKythbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CisrYW1fX3ZfQ0NfMSA9IAorIENDTEQgPSAkKENDKQorLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCistCSQoTERGTEFHUykgLW8gJEAKKytMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisrCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKytBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKKythbV9fdl9DQ0xEXzEgPSAKKyBTT1VSQ0VTID0gJChkYXRlX3Rlc3RfU09VUkNFUykKKyBESVNUX1NPVVJDRVMgPSAkKGRhdGVfdGVzdF9TT1VSQ0VTKQorK2FtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAorKyAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCisrICAgIG58bm98Tk8pIGZhbHNlOzsgXAorKyAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAorKyAgZXNhYworK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisrIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworKyMgKm5vdCogcHJlc2VydmVkLgorK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKysgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorKycKKysjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisrIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisrIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKythbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKysgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisrICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKyBFVEFHUyA9IGV0YWdzCisgQ1RBR1MgPSBjdGFncworIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisgQUNMT0NBTCA9IEBBQ0xPQ0FMQAorIEFMTE9DQSA9IEBBTExPQ0FACisgQU1UQVIgPSBAQU1UQVJACisrQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACisgQVIgPSBAQVJACisgQVMgPSBAQVNACisgQVVUT0NPTkYgPSBAQVVUT0NPTkZACitAQCAtMTE0LDYgKzIxNCw3IEBAIExOX1MgPSBATE5fU0AKKyBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorIE1BSU5UID0gQE1BSU5UQAorIE1BS0VJTkZPID0gQE1BS0VJTkZPQAorK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKKyBNS0RJUl9QID0gQE1LRElSX1BACisgTk0gPSBATk1ACisgTk1FRElUID0gQE5NRURJVEAKK0BAIC0xMjYsNiArMjI3LDcgQEAgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKKyBQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACisgUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorQEAgLTE0Niw2ICsyNDgsNyBAQCBhYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorIGFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKKyBhYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACisgYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACisrYWNfY3RfQVIgPSBAYWNfY3RfQVJACisgYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACisgYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKKyBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACitAQCAtMTgwLDcgKzI4Myw2IEBAIGxpYmRpciA9IEBsaWJkaXJACisgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACisgbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorLWx0X0VDSE8gPSBAbHRfRUNIT0AKKyBtYW5kaXIgPSBAbWFuZGlyQAorIG1rZGlyX3AgPSBAbWtkaXJfcEAKKyBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitAQCAtMTkzLDYgKzI5NSw3IEBAIHNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorIHNyY2RpciA9IEBzcmNkaXJACisgc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorIHRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisrdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIEFNX0NGTEFHUyA9IC1JJHt0b3Bfc3JjZGlyfS9pbmNsdWRlCitAQCAtMjA3LDE0ICszMTAsMTQgQEAgJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmkKKyAJQGZvciBkZXAgaW4gJD87IGRvIFwKKyAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKyAJICAgICokJGRlcCopIFwKKy0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKy0JCSYmIGV4aXQgMDsgXAorKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKysJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorIAkgICAgICBleGl0IDE7OyBcCisgCSAgZXNhYzsgXAorIAlkb25lOyBcCistCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdGVzdHMvTWFrZWZpbGUnOyBcCistCWNkICQodG9wX3NyY2RpcikgJiYgXAorLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdGVzdHMvTWFrZWZpbGUKKysJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIHRlc3RzL01ha2VmaWxlJzsgXAorKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisrCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIHRlc3RzL01ha2VmaWxlCisgLlBSRUNJT1VTOiBNYWtlZmlsZQorIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJQGNhc2UgJyQ/JyBpbiBcCitAQCAtMjMyLDE2ICszMzUsMjAgQEAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisgCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyskKGFtX19hY2xvY2FsX200X2RlcHMpOgorIAorIGNsZWFuLWNoZWNrUFJPR1JBTVM6CistCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorLQkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKy0JICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKy0JICBybSAtZiAkJHAgJCRmIDsgXAorLQlkb25lCistZGF0ZV90ZXN0JChFWEVFWFQpOiAkKGRhdGVfdGVzdF9PQkpFQ1RTKSAkKGRhdGVfdGVzdF9ERVBFTkRFTkNJRVMpIAorKwlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKysJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKysJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorKwlybSAtZiAkJGxpc3QKKysKKytkYXRlX3Rlc3QkKEVYRUVYVCk6ICQoZGF0ZV90ZXN0X09CSkVDVFMpICQoZGF0ZV90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9kYXRlX3Rlc3RfREVQRU5ERU5DSUVTKSAKKyAJQHJtIC1mIGRhdGVfdGVzdCQoRVhFRVhUKQorLQkkKExJTkspICQoZGF0ZV90ZXN0X09CSkVDVFMpICQoZGF0ZV90ZXN0X0xEQUREKSAkKExJQlMpCisrCSQoQU1fVl9DQ0xEKSQoTElOSykgJChkYXRlX3Rlc3RfT0JKRUNUUykgJChkYXRlX3Rlc3RfTERBREQpICQoTElCUykKKyAKKyBtb3N0bHljbGVhbi1jb21waWxlOgorIAktcm0gLWYgKi4kKE9CSkVYVCkKK0BAIC0yNTIsMjUgKzM1OSwyNSBAQCBkaXN0Y2xlYW4tY29tcGlsZToKKyBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGF0ZV90ZXN0LlBvQGFtX19xdW90ZUAKKyAKKyAuYy5vOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KKytAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8CisgCisgLmMub2JqOgorLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCisrQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKKyBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACistQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKyAKKyAuYy5sbzoKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKKytAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKKy1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisrQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorIAorIG1vc3RseWNsZWFuLWxpYnRvb2w6CisgCS1ybSAtZiAqLmxvCitAQCAtMjc4LDQ5ICszODUsNTQgQEAgbW9zdGx5Y2xlYW4tbGlidG9vbDoKKyBjbGVhbi1saWJ0b29sOgorIAktcm0gLXJmIC5saWJzIF9saWJzCisgCistSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKy0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLQkgIGRvbmUgfCBcCistCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXRweSA9IDE7IH0gXAorLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKy0JbWtpZCAtZklEICQkdW5pcXVlCistdGFnczogVEFHUworLQorLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKy0JCSQoVEFHU19GSUxFUykgJChMSVNQKQorLQl0YWdzPTsgXAorK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQorK3RhZ3M6IHRhZ3MtYW0KKytUQUdTOiB0YWdzCisrCisrdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorKwlzZXQgeDsgXAorIAloZXJlPWBwd2RgOyBcCistCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCistCSAgZG9uZSB8IFwKKy0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCistCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisrCXNoaWZ0OyBcCisrCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisgCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICQkdGFncyAkJHVuaXF1ZTsgXAorKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKysJICBlbHNlIFwKKysJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKysJICAgICAgJCR1bmlxdWU7IFwKKysJICBmaTsgXAorIAlmaQorLWN0YWdzOiBDVEFHUworLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCistCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKy0JdGFncz07IFwKKy0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCistCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKy0JICBkb25lIHwgXAorLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCistCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorK2N0YWdzOiBjdGFncy1hbQorKworK0NUQUdTOiBjdGFncworK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisrCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKysJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisgCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorLQkgICAgICQkdGFncyAkJHVuaXF1ZQorKwkgICAgICQkdW5pcXVlCisgCisgR1RBR1M6CisgCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCistCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKysJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisrCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KKysKKytjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisrCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisrCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorKwkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKKysJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAorKwllc2FjOyBcCisrCWZvciBpIGluICQkbGlzdDsgZG8gXAorKwkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAorKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKysJICBlbHNlIFwKKysJICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCisrCSAgZmk7IFwKKysJZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCisgCisgZGlzdGNsZWFuLXRhZ3M6CisgCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitAQCAtMzQxLDEzICs0NTMsMTcgQEAgZGlzdGRpcjogJChESVNURklMRVMpCisgCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisgCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKysJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisrCSAgICBmaTsgXAorIAkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCistCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKysJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKyAJICAgIGZpOyBcCistCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisrCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisgCSAgZWxzZSBcCistCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKy0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKysJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisgCSAgICB8fCBleGl0IDE7IFwKKyAJICBmaTsgXAorIAlkb25lCitAQCAtMzY2LDE2ICs0ODIsMjIgQEAgaW5zdGFsbC1hbTogYWxsLWFtCisgCisgaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KKyBpbnN0YWxsLXN0cmlwOgorLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorLQkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKKysJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKysJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisrCSAgICAgIGluc3RhbGw7IFwKKysJZWxzZSBcCisrCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKysJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKysJZmkKKyBtb3N0bHljbGVhbi1nZW5lcmljOgorIAorIGNsZWFuLWdlbmVyaWM6CisgCisgZGlzdGNsZWFuLWdlbmVyaWM6CisgCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKyAKKyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKK0BAIC0zOTcsNiArNTE5LDggQEAgZHZpLWFtOgorIAorIGh0bWw6IGh0bWwtYW0KKyAKKytodG1sLWFtOgorKworIGluZm86IGluZm8tYW0KKyAKKyBpbmZvLWFtOgorQEAgLTQwNSwxOCArNTI5LDI4IEBAIGluc3RhbGwtZGF0YS1hbToKKyAKKyBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKyAKKytpbnN0YWxsLWR2aS1hbToKKysKKyBpbnN0YWxsLWV4ZWMtYW06CisgCisgaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKyAKKytpbnN0YWxsLWh0bWwtYW06CisrCisgaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKyAKKytpbnN0YWxsLWluZm8tYW06CisrCisgaW5zdGFsbC1tYW46CisgCisgaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisgCisraW5zdGFsbC1wZGYtYW06CisrCisgaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorIAorK2luc3RhbGwtcHMtYW06CisrCisgaW5zdGFsbGNoZWNrLWFtOgorIAorIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KK0BAIC00MzksMTEgKzU3MywxMSBAQCBwcy1hbToKKyAKKyB1bmluc3RhbGwtYW06CisgCistLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKyAKKy0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBcCistCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisrLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorKwljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIFwKKysJY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKyAJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorIAlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKyAJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCitAQCAtNDUzLDcgKzU4Nyw3IEBAIHVuaW5zdGFsbC1hbToKKyAJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorIAltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisgCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKy0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisrCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisgCisgCisgQENGX0JVSUxEX1RFU1RTX1RSVUVAY2hlY2s6CitAQCAtNDY0LDYgKzU5OCw3IEBAIHVuaW5zdGFsbC1hbToKKyAKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUB2YWxncmluZDoKKyBAQ0ZfQlVJTERfVEVTVFNfVFJVRUAJJHtMSUJUT09MfSAtLW1vZGUgZXhlY3V0ZSAke0B9ICR7VkFMR1JJTkRGTEFHU30gLi9kYXRlX3Rlc3QKKysKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorIC5OT0VYUE9SVDoKKy0tIAorMi4yMS4wLjM5Mi5nZjhmNjc4NzE1OWUtZ29vZworCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Ni5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTY2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZGNmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Ni5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDI5YjQ0ZDU2MGRkM2FhNzc2MDcxMjYxYjY0NjFkYjk2NTNjOTAxYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiR2FicmllbCBNLiBCZWRkaW5nZmllbGQiIDxiZWRkaW5nZmllbGRAZ29vZ2xlLmNvbT4KK0RhdGU6IEZyaSwgMjIgTWFyIDIwMTkgMDk6MDc6MzggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIEFkZCBhdXRvY29uZiBzdXBwb3J0IGZvciAtLXdpdGgtY2hhcnNldC1kYXRhCisKKy0tLQorIE1ha2VmaWxlLmFtICB8ICAyICstCisgY29uZmlndXJlLmFjIHwgMTAgKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNGMxMDE3NC4uNDNiMzU0OCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTM1LDcgKzM1LDcgQEAgbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YV9EQVRBCT0gQ0ZDaGFyYWN0ZXJTZXRCaXRtYXBzLmJpdG1hcAkJXAorIENGX0NPTU1PTl9DUFBGTEFHUwkJPSAkKEFNX0NQUEZMQUdTKQkJCVwKKyAJCQkJICAtRFVfU0hPV19EUkFGVF9BUEk9MQkJCVwKKyAJCQkJICAtRENGX0JVSUxESU5HX0NGPTEJCQlcCistCQkJCSAgLURfX2tDRkRhdGFEaXI9XCIke2RhdGFkaXJ9XCIgXAorKwkJCQkgIC1EX19rQ0ZEYXRhRGlyPVwiJHtjaGFyc2V0X2RhdGFfZGlyfVwiIFwKKyAJCQkJICAtRE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQ9TUFDX09TX1hfVkVSU0lPTl8xMF81CVwKKyAJCQkJICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQkJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL21hY2hfc3VwcG9ydAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzg4YTM5Yy4uN2NmZDdkNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTQwLDYgKzU0MCwxNSBAQCBBQ19BUkdfV0lUSCh0ei1kYXRhLAorIEFDX01TR19SRVNVTFQoJHt0el9kYXRhX2Rpcn0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFtUWkRJUl0sWyIke3R6X2RhdGFfZGlyfSJdLFtEZWZpbmUgdGhpcyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHRpbWUgem9uZSBkYXRhIGZpbGVzIChlLmcuIC91c3Ivc2hhcmUvem9uZWluZm8pIG9uIHRoZSB0YXJnZXQgc3lzdGVtLl0pCisgCisrQUNfTVNHX0NIRUNLSU5HKFtvdmVycmlkZSB0aGUgcnVuLXRpbWUgc2VhcmNoIHBhdGggZm9yIGNoYXJzZXQgZGF0YV0pCisrQUNfQVJHX1dJVEgoY2hhcnNldC1kYXRhLAorKwlBU19IRUxQX1NUUklORyhbLS13aXRoLWNoYXJzZXQtZGF0YT1ESVJdLAorKwkgICAgICAgICAgICAgICBbU3BlY2lmeSBhIHN0cmluZyB1c2VkIGluIHBsYWNlIG9mICdkYXRhZGlyJyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgdG8gZmluZCB0aGUgY2hhcnNldCBkYXRhIEA8OkBkZWZhdWx0PSR7ZGF0YWRpcn1AOj5ALl0pLAorKwlbY2hhcnNldF9kYXRhX2Rpcj0ke3dpdGh2YWx9XSwKKysJW2NoYXJzZXRfZGF0YV9kaXI9JHtkYXRhZGlyfV0pCisrQUNfTVNHX1JFU1VMVCgke2NoYXJzZXRfZGF0YV9kaXJ9KQorK0FDX1NVQlNUKGNoYXJzZXRfZGF0YV9kaXIpCisrCisgIworICMgQ2hlY2sgZm9yIHR6Y29kZSBoZWFkZXIgc3VwcG9ydC4KKyAjCitAQCAtNzQyLDYgKzc1MSw3IEBAIEFDX01TR19OT1RJQ0UoWworICAgVGltZSBab25lIGNvbXBpbGUgb3B0aW9ucyAgIDogJHtUWl9DUFBGTEFHU30KKyAgIFRpbWUgWm9uZSBkZWZhdWx0IGZpbGUgICAgICA6ICR7dHpfZGVmYXVsdF9maWxlfQorICAgVGltZSBab25lIGRhdGEgZGlyZWN0b3J5ICAgIDogJHt0el9kYXRhX2Rpcn0KKysgIENoYXJzZXQgZGF0YSBkaXJlY3RvcnkgICAgICA6ICR7Y2hhcnNldF9kYXRhX2Rpcn0KKyAgIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICA6ICR7Q0N9CisgICBQcmVwcm9jZXNzb3IgZmxhZ3MgICAgICAgICAgOiAke0NQUEZMQUdTfQorICAgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgIDogJHtDRkxBR1N9CistLSAKKzIuMjEuMC4zOTIuZ2Y4ZjY3ODcxNTllLWdvb2cKKwpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjcucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGEzMjczCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjcucGF0Y2gKQEAgLTAsMCArMSwzMDggQEAKK0Zyb20gYmFhNDcxNWFjNzZiNmE0MTljNmU5MmJlY2FhZjk4ZTE4ZDY4ODZjMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJHYWJyaWVsIE0uIEJlZGRpbmdmaWVsZCIgPGJlZGRpbmdmaWVsZEBnb29nbGUuY29tPgorRGF0ZTogRnJpLCAyMiBNYXIgMjAxOSAwOTowOToyMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvNF0gYXV0b3JlY29uZiAtaXZmIHdpdGggYXV0b2NvbmYgMi42OSBhbmQgYXV0b21ha2UgMS4xNC4xIG9uCisgdWJ1bnR1IDE0LjA0LjUgKC0td2l0aC1jaGFyc2V0LWRhdGEpCisKKy0tLQorIE1ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQorIGNvbXBhdC9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKy0tCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCisgZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluICAgICAgICAgICAgIHwgIDEgKworIGV4YW1wbGVzL0NGTG9jYWxTZXJ2ZXIvTWFrZWZpbGUuaW4gICAgICAgICB8ICAxICsKKyBleGFtcGxlcy9DRk1lc3NhZ2VQb3J0L01ha2VmaWxlLmluICAgICAgICAgfCAgMSArCisgZXhhbXBsZXMvQ0ZSdW5Mb29wVGltZXJFeGFtcGxlL01ha2VmaWxlLmluIHwgIDEgKworIGV4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICB8ICAxICsKKyBleGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5L01ha2VmaWxlLmluICAgfCAgMSArCisgZXhhbXBsZXMvRGlzcGxheVVSTC9NYWtlZmlsZS5pbiAgICAgICAgICAgIHwgIDEgKworIGV4YW1wbGVzL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBleGFtcGxlcy9SZWFkUExpc3RFeGFtcGxlL01ha2VmaWxlLmluICAgICAgfCAgMSArCisgZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyL01ha2VmaWxlLmluICAgICAgIHwgIDEgKworIGV4YW1wbGVzL1N0cmluZ0V4YW1wbGUvTWFrZWZpbGUuaW4gICAgICAgICB8ICAxICsKKyBleGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbiAgICAgfCAgMSArCisgaW5jbHVkZS9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHRlc3RzL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyAxNyBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggNTQ4MjA5Yy4uYzRiMzU4MCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTY1Miw2ICs2NTIsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorQEAgLTcwNiw3ICs3MDcsNyBAQCBsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhX0RBVEEgPSBDRkNoYXJhY3RlclNldEJpdG1hcHMuYml0bWFwCQlcCisgQ0ZfQ09NTU9OX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykJCQlcCisgCQkJCSAgLURVX1NIT1dfRFJBRlRfQVBJPTEJCQlcCisgCQkJCSAgLURDRl9CVUlMRElOR19DRj0xCQkJXAorLQkJCQkgIC1EX19rQ0ZEYXRhRGlyPVwiJHtkYXRhZGlyfVwiIFwKKysJCQkJICAtRF9fa0NGRGF0YURpcj1cIiR7Y2hhcnNldF9kYXRhX2Rpcn1cIiBcCisgCQkJCSAgLURNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEPU1BQ19PU19YX1ZFUlNJT05fMTBfNQlcCisgCQkJCSAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUJCVwKKyAJCQkJICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZS9tYWNoX3N1cHBvcnQKK2RpZmYgLS1naXQgYS9jb21wYXQvTWFrZWZpbGUuaW4gYi9jb21wYXQvTWFrZWZpbGUuaW4KK2luZGV4IDkwNTc0Y2EuLmIwZDk2MmIgMTAwNjQ0CistLS0gYS9jb21wYXQvTWFrZWZpbGUuaW4KKysrKyBiL2NvbXBhdC9NYWtlZmlsZS5pbgorQEAgLTgwLDggKzgwLDggQEAgYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKKyBob3N0X3RyaXBsZXQgPSBAaG9zdEAKKyBzdWJkaXIgPSBjb21wYXQKKyBESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorLQkkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzIHN0cmxjYXQuYyBnZXR0aW1lb2ZkYXkuYyBcCistCXN0cmxjcHkuYyBmbHNsLmMgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorKwkkKHRvcF9zcmNkaXIpL2NvbmZpZy9ta2luc3RhbGxkaXJzIHN0cmxjYXQuYyBmbHNsLmMgXAorKwlnZXR0aW1lb2ZkYXkuYyBzdHJsY3B5LmMgJCh0b3Bfc3JjZGlyKS9jb25maWcvZGVwY29tcAorIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKKyBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hY2luY2x1ZGUubTQgXAorIAkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorQEAgLTI0OCw2ICsyNDgsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZDgxN2YzYi4uMzlmYjk1YSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjM5LDYgKzYzOSw3IEBAIGFtX19FWEVFWFRfVFJVRQorIExUTElCT0JKUworIExJQk9CSlMKKyBBTExPQ0EKKytjaGFyc2V0X2RhdGFfZGlyCisgUFRIUkVBRF9DRkxBR1MKKyBQVEhSRUFEX0xJQlMKKyBQVEhSRUFEX0NDCitAQCAtODA3LDYgKzgwOCw3IEBAIHdpdGhfdXVpZF9pbmNsdWRlcworIHdpdGhfdXVpZF9saWJzCisgd2l0aF90el9kZWZhdWx0Cisgd2l0aF90el9kYXRhCisrd2l0aF9jaGFyc2V0X2RhdGEKKyB3aXRoX3R6X2luY2x1ZGVzCisgJworICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitAQCAtMTQ4Niw2ICsxNDg4LDkgQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdD0vZXRjL2xvY2FsdGltZV0uCisgICAtLXdpdGgtdHotZGF0YT1ESVIgICAgICBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgdGltZSB6b25lIGRhdGEgZmlsZXMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIFtkZWZhdWx0PS91c3Ivc2hhcmUvem9uZWluZm9dLgorKyAgLS13aXRoLWNoYXJzZXQtZGF0YT1ESVIgU3BlY2lmeSBhIHN0cmluZyB1c2VkIGluIHBsYWNlIG9mICdkYXRhZGlyJyB0byBiZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBhdCBydW50aW1lIHRvIGZpbmQgdGhlIGNoYXJzZXQgZGF0YQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHQ9JHtkYXRhZGlyfV0uCisgICAtLXdpdGgtdHotaW5jbHVkZXM9RElSICBTcGVjaWZ5IGxvY2F0aW9uIG9mIFRpbWUgWm9uZSAodHpjb2RlKSBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdD0vdXNyL2luY2x1ZGVdLgorIAorQEAgLTE3ODg5LDYgKzE3ODk0LDIwIEBAIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyBfQUNFT0YKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIG92ZXJyaWRlIHRoZSBydW4tdGltZSBzZWFyY2ggcGF0aCBmb3IgY2hhcnNldCBkYXRhIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBvdmVycmlkZSB0aGUgcnVuLXRpbWUgc2VhcmNoIHBhdGggZm9yIGNoYXJzZXQgZGF0YS4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2hhcnNldC1kYXRhIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfY2hhcnNldF9kYXRhK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfY2hhcnNldF9kYXRhOyBjaGFyc2V0X2RhdGFfZGlyPSR7d2l0aHZhbH0KKytlbHNlCisrICBjaGFyc2V0X2RhdGFfZGlyPSR7ZGF0YWRpcn0KKytmaQorKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2NoYXJzZXRfZGF0YV9kaXJ9IiA+JjUKKyskYXNfZWNobyAiJHtjaGFyc2V0X2RhdGFfZGlyfSIgPiY2OyB9CisrCisrCisgIworICMgQ2hlY2sgZm9yIHR6Y29kZSBoZWFkZXIgc3VwcG9ydC4KKyAjCitAQCAtMjI5NTAsNiArMjI5NjksNyBAQCBmaQorICAgVGltZSBab25lIGNvbXBpbGUgb3B0aW9ucyAgIDogJHtUWl9DUFBGTEFHU30KKyAgIFRpbWUgWm9uZSBkZWZhdWx0IGZpbGUgICAgICA6ICR7dHpfZGVmYXVsdF9maWxlfQorICAgVGltZSBab25lIGRhdGEgZGlyZWN0b3J5ICAgIDogJHt0el9kYXRhX2Rpcn0KKysgIENoYXJzZXQgZGF0YSBkaXJlY3RvcnkgICAgICA6ICR7Y2hhcnNldF9kYXRhX2Rpcn0KKyAgIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICA6ICR7Q0N9CisgICBQcmVwcm9jZXNzb3IgZmxhZ3MgICAgICAgICAgOiAke0NQUEZMQUdTfQorICAgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgIDogJHtDRkxBR1N9CitAQCAtMjI5ODEsNiArMjMwMDEsNyBAQCAkYXNfZWNobyAiJGFzX21lOgorICAgVGltZSBab25lIGNvbXBpbGUgb3B0aW9ucyAgIDogJHtUWl9DUFBGTEFHU30KKyAgIFRpbWUgWm9uZSBkZWZhdWx0IGZpbGUgICAgICA6ICR7dHpfZGVmYXVsdF9maWxlfQorICAgVGltZSBab25lIGRhdGEgZGlyZWN0b3J5ICAgIDogJHt0el9kYXRhX2Rpcn0KKysgIENoYXJzZXQgZGF0YSBkaXJlY3RvcnkgICAgICA6ICR7Y2hhcnNldF9kYXRhX2Rpcn0KKyAgIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICA6ICR7Q0N9CisgICBQcmVwcm9jZXNzb3IgZmxhZ3MgICAgICAgICAgOiAke0NQUEZMQUdTfQorICAgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgIDogJHtDRkxBR1N9CitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluIGIvZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluCitpbmRleCAzZTVhMmM4Li44NGQwYjRmIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvQWxsb2NhdG9yL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9BbGxvY2F0b3IvTWFrZWZpbGUuaW4KK0BAIC0yNjUsNiArMjY1LDcgQEAgYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKKyBidWlsZF9vcyA9IEBidWlsZF9vc0AKKyBidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorIGJ1aWxkZGlyID0gQGJ1aWxkZGlyQAorK2NoYXJzZXRfZGF0YV9kaXIgPSBAY2hhcnNldF9kYXRhX2RpckAKKyBkYXRhZGlyID0gQGRhdGFkaXJACisgZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACisgZG9jZGlyID0gQGRvY2RpckAKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9DRkxvY2FsU2VydmVyL01ha2VmaWxlLmluIGIvZXhhbXBsZXMvQ0ZMb2NhbFNlcnZlci9NYWtlZmlsZS5pbgoraW5kZXggNTYwYjM5MS4uM2ZmNzMwOCAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL0NGTG9jYWxTZXJ2ZXIvTWFrZWZpbGUuaW4KKysrKyBiL2V4YW1wbGVzL0NGTG9jYWxTZXJ2ZXIvTWFrZWZpbGUuaW4KK0BAIC0yNzcsNiArMjc3LDcgQEAgYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKKyBidWlsZF9vcyA9IEBidWlsZF9vc0AKKyBidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorIGJ1aWxkZGlyID0gQGJ1aWxkZGlyQAorK2NoYXJzZXRfZGF0YV9kaXIgPSBAY2hhcnNldF9kYXRhX2RpckAKKyBkYXRhZGlyID0gQGRhdGFkaXJACisgZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACisgZG9jZGlyID0gQGRvY2RpckAKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9DRk1lc3NhZ2VQb3J0L01ha2VmaWxlLmluIGIvZXhhbXBsZXMvQ0ZNZXNzYWdlUG9ydC9NYWtlZmlsZS5pbgoraW5kZXggODQ0OTc4OC4uNDkzZGU0ZCAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL0NGTWVzc2FnZVBvcnQvTWFrZWZpbGUuaW4KKysrKyBiL2V4YW1wbGVzL0NGTWVzc2FnZVBvcnQvTWFrZWZpbGUuaW4KK0BAIC0yNjgsNiArMjY4LDcgQEAgYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKKyBidWlsZF9vcyA9IEBidWlsZF9vc0AKKyBidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorIGJ1aWxkZGlyID0gQGJ1aWxkZGlyQAorK2NoYXJzZXRfZGF0YV9kaXIgPSBAY2hhcnNldF9kYXRhX2RpckAKKyBkYXRhZGlyID0gQGRhdGFkaXJACisgZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACisgZG9jZGlyID0gQGRvY2RpckAKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9DRlJ1bkxvb3BUaW1lckV4YW1wbGUvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9DRlJ1bkxvb3BUaW1lckV4YW1wbGUvTWFrZWZpbGUuaW4KK2luZGV4IGMwMDk4MDguLjA1ZDRlYzIgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9DRlJ1bkxvb3BUaW1lckV4YW1wbGUvTWFrZWZpbGUuaW4KKysrKyBiL2V4YW1wbGVzL0NGUnVuTG9vcFRpbWVyRXhhbXBsZS9NYWtlZmlsZS5pbgorQEAgLTI2Niw2ICsyNjYsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbgoraW5kZXggNTU1ZjMwZS4uZGUxMTBmYyAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL0NGVGVzdC9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvQ0ZUZXN0L01ha2VmaWxlLmluCitAQCAtMjY4LDYgKzI2OCw3IEBAIGJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACisgYnVpbGRfb3MgPSBAYnVpbGRfb3NACisgYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKKyBidWlsZGRpciA9IEBidWlsZGRpckAKKytjaGFyc2V0X2RhdGFfZGlyID0gQGNoYXJzZXRfZGF0YV9kaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRvY2RpciA9IEBkb2NkaXJACitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvRE5TU2VydmljZU1ldGFRdWVyeS9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL0ROU1NlcnZpY2VNZXRhUXVlcnkvTWFrZWZpbGUuaW4KK2luZGV4IDJkMjk3ZmEuLjdjNzdhMmIgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5L01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9ETlNTZXJ2aWNlTWV0YVF1ZXJ5L01ha2VmaWxlLmluCitAQCAtMjY2LDYgKzI2Niw3IEBAIGJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACisgYnVpbGRfb3MgPSBAYnVpbGRfb3NACisgYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKKyBidWlsZGRpciA9IEBidWlsZGRpckAKKytjaGFyc2V0X2RhdGFfZGlyID0gQGNoYXJzZXRfZGF0YV9kaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRvY2RpciA9IEBkb2NkaXJACitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvRGlzcGxheVVSTC9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL0Rpc3BsYXlVUkwvTWFrZWZpbGUuaW4KK2luZGV4IDNmODljMWMuLmYxNTExNDcgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9EaXNwbGF5VVJML01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9EaXNwbGF5VVJML01ha2VmaWxlLmluCitAQCAtMjY1LDYgKzI2NSw3IEBAIGJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACisgYnVpbGRfb3MgPSBAYnVpbGRfb3NACisgYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKKyBidWlsZGRpciA9IEBidWlsZGRpckAKKytjaGFyc2V0X2RhdGFfZGlyID0gQGNoYXJzZXRfZGF0YV9kaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRvY2RpciA9IEBkb2NkaXJACitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9NYWtlZmlsZS5pbgoraW5kZXggNTE1ZGE0ZS4uOWU0YmNhMyAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9NYWtlZmlsZS5pbgorQEAgLTI3Niw2ICsyNzYsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL1JlYWRQTGlzdEV4YW1wbGUvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9SZWFkUExpc3RFeGFtcGxlL01ha2VmaWxlLmluCitpbmRleCBiZDk0NDhmLi5mN2IyMDI2IDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvUmVhZFBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvUmVhZFBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgorQEAgLTI2NSw2ICsyNjUsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorZGlmZiAtLWdpdCBhL2V4YW1wbGVzL1NpbXBsZVdlYlNlcnZlci9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL1NpbXBsZVdlYlNlcnZlci9NYWtlZmlsZS5pbgoraW5kZXggMDgyYTgyYi4uYTk4YTg3MSAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL1NpbXBsZVdlYlNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZXhhbXBsZXMvU2ltcGxlV2ViU2VydmVyL01ha2VmaWxlLmluCitAQCAtMjY1LDYgKzI2NSw3IEBAIGJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACisgYnVpbGRfb3MgPSBAYnVpbGRfb3NACisgYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKKyBidWlsZGRpciA9IEBidWlsZGRpckAKKytjaGFyc2V0X2RhdGFfZGlyID0gQGNoYXJzZXRfZGF0YV9kaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRvY2RpciA9IEBkb2NkaXJACitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvU3RyaW5nRXhhbXBsZS9NYWtlZmlsZS5pbiBiL2V4YW1wbGVzL1N0cmluZ0V4YW1wbGUvTWFrZWZpbGUuaW4KK2luZGV4IDM1OTk3NDcuLjcyNWMzMWEgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9TdHJpbmdFeGFtcGxlL01ha2VmaWxlLmluCitAQCAtMjY1LDYgKzI2NSw3IEBAIGJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACisgYnVpbGRfb3MgPSBAYnVpbGRfb3NACisgYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKKyBidWlsZGRpciA9IEBidWlsZGRpckAKKytjaGFyc2V0X2RhdGFfZGlyID0gQGNoYXJzZXRfZGF0YV9kaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRvY2RpciA9IEBkb2NkaXJACitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvV3JpdGVQTGlzdEV4YW1wbGUvTWFrZWZpbGUuaW4gYi9leGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgoraW5kZXggYjM3ODhjNC4uMmE5ZGNlMSAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL1dyaXRlUExpc3RFeGFtcGxlL01ha2VmaWxlLmluCisrKysgYi9leGFtcGxlcy9Xcml0ZVBMaXN0RXhhbXBsZS9NYWtlZmlsZS5pbgorQEAgLTI2NSw2ICsyNjUsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9pbmNsdWRlL01ha2VmaWxlLmluCitpbmRleCA4OWJjMjk5Li42ZGE2ZDM0IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9NYWtlZmlsZS5pbgorKysrIGIvaW5jbHVkZS9NYWtlZmlsZS5pbgorQEAgLTI2Niw2ICsyNjYsNyBAQCBidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorIGJ1aWxkX29zID0gQGJ1aWxkX29zQAorIGJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACisgYnVpbGRkaXIgPSBAYnVpbGRkaXJACisrY2hhcnNldF9kYXRhX2RpciA9IEBjaGFyc2V0X2RhdGFfZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkb2NkaXIgPSBAZG9jZGlyQAorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmluIGIvdGVzdHMvTWFrZWZpbGUuaW4KK2luZGV4IDA2ZWYxYjQuLjU3OWIyMzggMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5pbgorKysrIGIvdGVzdHMvTWFrZWZpbGUuaW4KK0BAIC0yNjUsNiArMjY1LDcgQEAgYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKKyBidWlsZF9vcyA9IEBidWlsZF9vc0AKKyBidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorIGJ1aWxkZGlyID0gQGJ1aWxkZGlyQAorK2NoYXJzZXRfZGF0YV9kaXIgPSBAY2hhcnNldF9kYXRhX2RpckAKKyBkYXRhZGlyID0gQGRhdGFkaXJACisgZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACisgZG9jZGlyID0gQGRvY2RpckAKKy0tIAorMi4yMS4wLjM5Mi5nZjhmNjc4NzE1OWUtZ29vZworCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02OC5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTY4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2ZmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02OC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitkaWZmIC1hcnVOIGEvQ0ZVbmlDaGFyLmMgYi9DRlVuaUNoYXIuYworLS0tIGEvQ0ZVbmlDaGFyLmMJMjAxOS0wNC0xOCAwMTo1MTo1OC42MzEyNDU4NTkgKzAwMDAKKysrKyBiL0NGVW5pQ2hhci5jCTIwMTktMDQtMTggMDE6NTE6MTAuMTI3MjkzNjIzICswMDAwCitAQCAtMjQxLDEyICsyNDEsMTYgQEAKKyAKKyAgICAgaW50IG5vX2hhbmdfZmQgPSBvcGVuKCIvZGV2L2F1dG9mc19ub3dhaXQiLCAwKTsKKyAgICAgaWYgKChmZCA9IG9wZW4oZmlsZU5hbWUsIE9fUkRPTkxZLCAwKSkgPCAwKSB7CisrI2lmbmRlZiBCVUlMRF9GRUFUVVJFX1NJTVVMQVRPUgorICAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkLW9ubHkgYWNjZXNzLiIpLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmaWxlTmFtZSk7CisrI2VuZGlmCisgCWNsb3NlKG5vX2hhbmdfZmQpOworIAlyZXR1cm4gZmFsc2U7CisgICAgIH0KKyAgICAgaWYgKGZzdGF0KGZkLCAmc3RhdEJ1ZikgPCAwIHx8ICgqYnl0ZXMgPSBtbWFwKDAsIHN0YXRCdWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApKSA9PSAodm9pZCAqKS0xKSB7CisrI2lmbmRlZiBCVUlMRF9GRUFUVVJFX1NJTVVMQVRPUgorICAgICAgICAgQ0ZMb2coX19rQ0ZMb2dBc3NlcnRpb24sIENGU1RSKCIlcygpOiBjb3VsZCBub3QgbWFwICVzIGZvciByZWFkLW9ubHkgYWNjZXNzLiIpLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmaWxlTmFtZSk7CisrI2VuZGlmCisgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUudGFyLmd6IGIvb3BlbmNmbGl0ZS50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmNGZkMAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUudGFyLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUudXJsIGIvb3BlbmNmbGl0ZS51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBhNDlkYwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUudXJsCkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9kb3dubG9hZC5zb3VyY2Vmb3JnZS5uZXQvb3BlbmNmbGl0ZS9vcGVuY2ZsaXRlLTQ3Ni4xNy4yLnRhci5negpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS52ZXJzaW9uIGIvb3BlbmNmbGl0ZS52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjAxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnZlcnNpb24KQEAgLTAsMCArMSBAQAorNDc2LjE3LjIK